Тези удобни инструменти на командния ред показват гъвкавостта на Golang.

Преобразуването на формата на изображението е жизненоважно при разработката на софтуер за осигуряване на съвместимост и ефективна обработка на изображения в различни системи. Можете да оптимизирате съхранението, предаването, изобразяването и манипулирането на изображения чрез преобразуване на изображения между формати.

Има много пакети за конвертиране на формат на изображение в екосистемата Go, а Golang предоставя пакет с изображения за форматиране и конвертиране на изображение. Пакетът за изображения предоставя основна функционалност за 2D изображения, включително функции за декодиране, кодиране, преоразмеряване и завъртане на изображения.

Първи стъпки с Image Package

Вградената библиотека с изображения на Go предоставя цялостна функционалност за работа с изображения в различни формати. The изображение пакетът осигурява поддръжка за четене, писане и манипулиране на изображения.

The изображение пакетът поддържа множество

instagram viewer
типове файлове с изображения и формати, включително JPEG, PNG, GIF и BMP. Тя ви позволява да четете и декодирате изображения от файлове или потоци и да кодирате и записвате изображения във файлове или потоци. Това улеснява работата с различни видове изображения в Go, независимо от техния формат.

Библиотеката също предлага широка функционалност за манипулиране и обработка на изображения. The изображение пакетът предоставя методи за достъп до отделни пиксели, позволявайки манипулиране на ниско ниво за задачи като промяна на стойности на пиксели или прилагане на персонализирани филтри.

Освен това пакетът поддържа цветови модели и предоставя инструменти за конвертиране между различни цветови представяния. Това е удобно за работа с изображения в различни цветови пространства.

Конвертиране на изображения от PNG в JPEG

PNG и JPEG са често използвани формати за изображения, всяка с различни характеристики. PNG е формат без загуби, който замества GIF, като поддържа висококачествени изображения със запазени данни за изображения и прозрачност. PNG е много подходящ за изображения с остри ръбове, текст или области с еднакъв цвят.

The изображение опаковката съдържа jpeg и png пакети, които можете да използвате за конвертиране на формат на изображение между двата формата.

Можете да напишете функция за конвертиране на PNG изображения в JPEG формат. Ето пример, който приема поток от байтови данни за изображение като вход:

package main

import (
"bytes"
"fmt"
"image/jpeg"
"image/png"
"log"
"net/http"
"os"
)

// ToJpeg converts a PNG image to JPEG format
funcToJpeg(imageBytes []byte)([]byte, error) {

// DetectContentType detects the content type
contentType := http.DetectContentType(imageBytes)

switch contentType {
case"image/png":
// Decode the PNG image bytes
img, err := png.Decode(bytes.NewReader(imageBytes))

if err != nil {
returnnil, err
}

buf := new(bytes.Buffer)

// encode the image as a JPEG file
if err := jpeg.Encode(buf, img, nil); err != nil {
returnnil, err
}

return buf.Bytes(), nil
}

returnnil, fmt.Errorf("unable to convert %#v to jpeg", contentType)
}

The ToJpeg функцията открива типа съдържание с http. DetectContentType функция. Тази функция приема байтовия фрагмент на изображението като вход и връща типа съдържание като низ.

The условен оператор за превключване има един случай, който проверява дали форматът на изображението е PNG. Функцията декодира байтовия фрагмент на изображението, ако е PNG изображение с изображение. Декодирай функция.

И накрая, на ToJpeg създава нов буфер и кодира изображението в JPEG формат с jpeg. Кодирай функция.

Можете да заредите PNG изображението, преди да извикате ToJpeg с операционна система. ReadFile функция:

funcmain() {
// Read the PNG image file

// Replace with the actual path to your PNG image
imagePath := "image.png"
imageBytes, err := os.ReadFile(imagePath)

if err != nil {
log.Fatalf("Failed to read image file: %s", err)
}

// Convert the PNG image to JPEG
jpegBytes, err := ToJpeg(imageBytes)

if err != nil {
log.Fatalf("Failed to convert image: %s", err)
}

// Write the JPEG bytes to a file

// Replace with the desired path for the output JPEG file
jpegPath := " output.jpg"
err = os.WriteFile(jpegPath, jpegBytes, os.ModePerm)

if err != nil {
log.Fatalf("Failed to write JPEG file: %s", err)
}

fmt.Println("Image conversion successful!")
}

The основен функцията чете PNG изображението от посочената директория, преди да извика ToJpeg функция. The ToJpeg функцията връща байтов отрязък от изображението във формат JPEG.

The основен функцията записва JPEG файла на посочения път с операционна система. WriteFile функция. След успешен процес на преобразуване, основен функция отпечатва съобщение на конзолата.

Конвертиране на изображения от JPEG в PNG

JPEG е формат със загуби, оптимизиран за сложни снимки. JPEG постига по-високи коефициенти на компресия, което води до по-малки размери на файловете, макар и с лека загуба на качество.

За разлика от PNG, JPEG не поддържа прозрачност. Той се отличава с показването на фотографски изображения с различни цветове и градиенти.

Ето как можете да конвертирате изход.jpg файл в PNG файл с име вход.png:

import (
"bytes"
"fmt"
"image/jpeg"
"image/png"
"log"
"os"
)

// JpegToPng converts a JPEG image to PNG format
funcJpegToPng(imageBytes []byte)([]byte, error) {
img, err := jpeg.Decode(bytes.NewReader(imageBytes))

if err != nil {
returnnil, err
}

buf := new(bytes.Buffer)

if err := png.Encode(buf, img); err != nil {
returnnil, err
}

return buf.Bytes(), nil
}

The JpegToPng функцията декодира байтовия фрагмент на изображението с jpeg. Декодирай функция. Функцията създава нов буфер за кодиране на изображението в PNG формат с png. Кодирай функция.

Ето го основен функция, която извиква JpegToPng функция:

funcmain() {
// Read the JPEG image file

// Replace with the actual path to your JPG image
imagePath := "output.jpg"
imageBytes, err := os.ReadFile(imagePath)

if err != nil {
log.Fatalf("Failed to read image file: %s", err)
}

// Convert the JPEG image to PNG
pngBytes, err := JpegToPng(imageBytes)

if err != nil {
log.Fatalf("Failed to convert image: %s", err)
}

// Write the PNG bytes to a file

// Replace with the desired path for the output JPEG file
pngPath := " input.png"
err = os.WriteFile(pngPath, pngBytes, os.ModePerm)

if err != nil {
log.Fatalf("Failed to write PNG file: %s", err)
}

fmt.Println("Image conversion successful!")
}

The основен функцията чете JPEG изображението от указаната директория и извиква JpegToPng функция. Тази функция връща байтов отрязък от изображението във формат PNG.

Go предоставя повечето функции, от които се нуждаете, за да създадете вашите приложения в своята стандартна библиотека

Пакетът с изображения е една от многото многофункционални библиотеки в екосистемата на Go. Благодарение на пакета с изображения можете да изпълнявате задачи с изображения, без да разчитате на външни библиотеки.

Go предоставя и други гъвкави пакети, включително http пакета за изграждане на уеб базирани приложения. Пакетът http съдържа повечето от функциите, от които се нуждаете, за да изградите сървърната страна на уеб приложение.