cpp

Работа с изображениями

Язык Go позволяет работать с изображениями форматов JPEG, PNG и GIF с помощью функций, расположенных в пакете image, и вложенных пакетах. Инструкция подключения пакета image:

import "image"

Получение информации об изображении

Получить информацию об изображении позволяет функция DecodeConfig() из пакета image. Формат функции:

image.DecodeConfig(r io.Reader) (image.Config, string, error)

В качестве параметра указывается поток ввода, например, файл изображения открытый для чтения. Функция возвращает три значения. Через первое значение доступен объект Config, который имеет следующие поля:

  • Width — ширина изображения;
  • Height — высота изображения;
  • ColorModel — цветовая модель (объект color.Model).

Через второе возвращаемое значение доступно название формата в виде строки. Через третье значение доступен объект ошибки или nil, если операция выполнена успешно.

Прежде чем использовать функцию DecodeConfig() необходимо подключить пакет, соответствующий формату изображения. Пакет напрямую не используется, а только регистрируется при подключении внутри функции init(), поэтому в качестве псевдонима указывается символ подчеркивания:

_ "image/gif"
_ "image/jpeg"
_ "image/png"

Пример получения информации об изображении приведен в листинге 17.1.

Листинг 17.1. Получение информации об изображении

package main

import (
   "fmt"
   "image"
   "image/color"
   "os"

   _ "image/jpeg"
   // _ "image/png"
   // _ "image/gif"
)

func main() {
   file, err := os.Open(`C:\book\photo.jpg`)
   if err != nil {
      fmt.Println(err)
      return
   }
   defer file.Close()
   config, format, err := image.DecodeConfig(file)
   if err != nil {
      fmt.Println(err)
      return
   }
   fmt.Println("Ширина:", config.Width)
   fmt.Println("Высота:", config.Height)
   switch config.ColorModel {
   case color.RGBAModel:
      fmt.Println("color.RGBAModel")
   case color.RGBA64Model:
      fmt.Println("color.RGBA64Model")
   case color.NRGBAModel:
      fmt.Println("color.NRGBAModel")
   case color.NRGBA64Model:
      fmt.Println("color.NRGBA64Model")
   case color.AlphaModel:
      fmt.Println("color.AlphaModel")
   case color.Alpha16Model:
      fmt.Println("color.Alpha16Model")
   case color.GrayModel:
      fmt.Println("color.GrayModel")
   case color.Gray16Model:
      fmt.Println("color.Gray16Model")
   case color.CMYKModel:
      fmt.Println("color.CMYKModel")
   case color.NYCbCrAModel:
      fmt.Println("color.NYCbCrAModel")
   case color.YCbCrModel:
      fmt.Println("color.YCbCrModel")
   default:
      fmt.Println("Цветовая модель не определена")
   }
   fmt.Println("Формат:", format)
}

Примерный результат (не забудьте добавить файл photo.jpg в каталог C:\book):

Ширина: 500
Высота: 333
color.YCbCrModel
Формат: jpeg

Вместо использования функции DecodeConfig() из пакета image можно воспользоваться одноименными функциями из пакетов, соответствующих формату изображения:

// import "image/jpeg"
jpeg.DecodeConfig(r io.Reader) (image.Config, error)
// import "image/png"
png.DecodeConfig(r io.Reader) (image.Config, error)
// import "image/gif"
gif.DecodeConfig(r io.Reader) (image.Config, error)

Пример получения размеров изображения формата JPEG приведен в листинге 17.2.

Листинг 17.2. Получение размеров изображения формата JPEG

package main

import (
   "fmt"
   "image/jpeg"
   "os"
)

func main() {
   file, err := os.Open(`C:\book\photo.jpg`)
   if err != nil {
      fmt.Println(err)
      return
   }
   defer file.Close()
   config, err := jpeg.DecodeConfig(file)
   if err != nil {
      fmt.Println(err)
      return
   }
   fmt.Println("Ширина:", config.Width)
   fmt.Println("Высота:", config.Height)
}

Учебник Go (Golang)
Учебник Go (Golang) в формате PDF

Помощь сайту

ЮMoney (Yandex-деньги): 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов

cpp