Чтение и запись PNG в Go без внешних библиотек
Для декодирования и кодирования PNG используйте стандартный пакет image/png. Устанавливать github.com/fogleman/gg для этих операций не нужно: это отдельная библиотека рисования.
Прочитать и сохранить изображение
package main
import (
"image/png"
"log"
"os"
)
func main() {
in, err := os.Open("image.png")
if err != nil { log.Fatal(err) }
img, err := png.Decode(in)
closeErr := in.Close()
if err != nil { log.Fatal(err) }
if closeErr != nil { log.Fatal(closeErr) }
out, err := os.Create("output.png")
if err != nil { log.Fatal(err) }
err = png.Encode(out, img)
closeErr = out.Close()
if err != nil { log.Fatal(err) }
if closeErr != nil { log.Fatal(closeErr) }
}Запустите программу в каталоге с доверенным image.png. os.Create создаёт либо перезаписывает output.png. Используйте отдельный путь для результата, если исходный файл нужно сохранить.
Что дают эти функции
Decode превращает поток PNG в image.Image, а Encode записывает изображение в PNG. Масштабирование, фильтры и рисование текста не являются операциями png.Decode или png.Encode: для них нужен отдельный алгоритм или пакет.
Ограничения входных данных
При обработке недоверенных загрузок ограничьте размер файла и размеры изображения до полного декодирования; для чтения метаданных существует DecodeConfig. Корректный заголовок ещё не доказывает, что всё изображение можно безопасно обработать в доступной памяти.