У меня есть код, который загружает изображения из AWS S3, декодирует их и изменяет их размер. Код поддерживает изображения в форматах PNG и JPG / JPEG.
Вот как я загружаю изображения с AWS S3:
//downloads an image from S3
func downloadImage(bucket string, item string) error {
file, err := os.Create(strings.Split(item, "/")[len(strings.Split(item, "/"))-1])
if err != nil {
fmt.Println("Unable to open file", err)
return err
}
//create a new AWS session
sess, err := session.NewSession(&aws.Config{
Region: aws.String("eu-west-1")},
)
//create the s3 downloader
downloader := s3manager.NewDownloader(sess)
defer file.Close()
//download the image from S3
numBytes, err := downloader.Download(file,
&s3.GetObjectInput{
Bucket: aws.String(bucket),
Key: aws.String(item),
})
if err != nil {
fmt.Println("Unable to download item", item)
fmt.Println(err)
return err
}
fmt.Println("Downloaded", file.Name(), numBytes, "bytes")
return nil
}
Вот как я декодирую изображения:
file, err := os.Open(image)
if err != nil {
fmt.Println(err)
return err
}
if strings.Split(image, ".")[len(strings.Split(image, "."))-1] == "jpg" ||
strings.Split(image, ".")[len(strings.Split(image, "."))-1] == "jpeg" {
img, err := jpeg.Decode(file)
if err != nil {
fmt.Println(err)
return err
}
file.Close()
}
else if strings.Split(image, ".")[len(strings.Split(image, "."))-1] == "png" {
img, err := png.Decode(file)
if err != nil {
fmt.Println(err)
return err
}
file.Close()
}
Изображения успешно загружены, декодированы и изменены. Проблема возникает, когда код загружает некоторые изображения PNG (не все) и пытается их декодировать. Не может.
выдает следующую ошибку:
png: invalid format: not a PNG file
Я запускаю все на Ubuntu 16.04. Что странно, если я открою это изображение с помощью средства просмотра изображений, оно выдаст ту же ошибку. Однако, если я открою с помощью любой другой программы, такой как: ImageMagick, изображение откроется без каких-либо жалоб.
Как я могу преодолеть эту проблему в коде Голанга?