cpp

Загрузка изображения из файла

Загрузить изображение из файла позволяет функция Decode() из пакета image. Формат функции:

image.Decode(r io.Reader) (image.Image, string, error)

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

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

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

Пример загрузки изображения из файла приведен в листинге 17.3.

Листинг 17.3. Загрузка изображения из файла

package main

import (
   "fmt"
   "image"
   "os"

   _ "image/jpeg"
)

func main() {
   file, err := os.Open(`C:\book\photo.jpg`)
   if err != nil {
      fmt.Println(err)
      return
   }
   defer file.Close()
   img, format, err := image.Decode(file)
   if err != nil {
      fmt.Println(err)
      return
   }
   fmt.Println("Размер:", img.Bounds().Size())
   // Размер: (500,333)
   fmt.Println("Формат:", format) // Формат: jpeg
}

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

// import "image/jpeg"
jpeg.Decode(r io.Reader) (image.Image, error)
// import "image/png"
png.Decode(r io.Reader) (image.Image, error)
// import "image/gif"
gif.Decode(r io.Reader) (image.Image, error)

Файлы в формате GIF могут содержать сразу несколько изображений. Загрузить все изображения позволяет функция DecodeAll() из пакета image/gif. Формат функции:

gif.DecodeAll(r io.Reader) (*gif.GIF, error)

Пример загрузки изображения формата PNG приведен в листинге 17.4.

Листинг 17.4. Загрузка изображения формата PNG из файла

package main

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

func main() {
   file, err := os.Open(`C:\book\photo.png`)
   if err != nil {
      fmt.Println(err)
      return
   }
   defer file.Close()
   img, err := png.Decode(file)
   if err != nil {
      fmt.Println(err)
      return
   }
   fmt.Println("Размер:", img.Bounds().Size())
   // Размер: (500,333)
}

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

Помощь сайту

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

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

cpp