این ابزارهای خط فرمان مفید، تطبیق پذیری Golang را نشان می دهد.
تبدیل فرمت تصویر در توسعه نرم افزار برای ایجاد سازگاری و مدیریت کارآمد تصویر در سیستم های مختلف حیاتی است. شما می توانید ذخیره سازی، انتقال، رندر و دستکاری تصویر را با تبدیل تصاویر بین فرمت ها بهینه کنید.
بسته های زیادی برای تبدیل فرمت تصویر در اکوسیستم Go وجود دارد و Golang یک بسته تصویری برای قالب بندی و تبدیل تصویر ارائه می دهد. بسته تصویری عملکردهای اولیه تصویر دوبعدی، از جمله ویژگی هایی برای رمزگشایی، رمزگذاری، تغییر اندازه و چرخش تصاویر را ارائه می دهد.
شروع کار با بسته تصویر
کتابخانه تصویر داخلی Go عملکرد جامعی را برای کار با تصاویر در فرمت های مختلف ارائه می دهد. بسته تصویر از خواندن، نوشتن و دستکاری تصاویر پشتیبانی می کند.
بسته تصویری از چندین نوع فایل تصویری و فرمتها از جمله JPEG، PNG، GIF و BMP پشتیبانی میکند. این به شما امکان می دهد تصاویر را از فایل ها یا جریان ها بخوانید و رمزگشایی کنید و تصاویر را در فایل ها یا جریان ها رمزگذاری و بنویسید. این کار کار با انواع مختلف تصاویر در Go را بدون توجه به فرمت آنها آسان می کند.
این کتابخانه همچنین قابلیت های گسترده ای را برای دستکاری و پردازش تصویر ارائه می دهد. بسته تصویر روشهایی را برای دسترسی به پیکسلهای مجزا فراهم میکند، که امکان دستکاری سطح پایین را برای کارهایی مانند تغییر مقادیر پیکسل یا اعمال فیلترهای سفارشی فراهم میکند.
علاوه بر این، این بسته از مدلهای رنگی پشتیبانی میکند و ابزارهایی برای تبدیل بین نمایشهای رنگی مختلف فراهم میکند. این برای کار با تصاویر در فضاهای رنگی مختلف مفید است.
تبدیل تصاویر از PNG به JPEG
فرمتهای PNG و JPEG معمولاً مورد استفاده قرار میگیرند که هر کدام ویژگیهای متفاوتی دارند. PNG یک فرمت بدون تلفات است که جایگزین GIF می شود و از تصاویر با کیفیت بالا با داده های تصویر حفظ شده و شفافیت پشتیبانی می کند. PNG برای تصاویر با لبه های واضح، متن یا مناطقی با رنگ یکنواخت مناسب است.
بسته تصویر شامل بسته های 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
func ToJpeg(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 {
return nil, err
}
buf := new(bytes.Buffer)
// encode the image as a JPEG file
if err := jpeg.Encode(buf, img, nil); err != nil {
return nil, err
}
return buf.Bytes(), nil
}
return nil, fmt.Errorf("unable to convert %#v to jpeg", contentType)
}
تابع ToJpeg نوع محتوا را با تابع http.DetectContentType تشخیص می دهد. این تابع برش بایت تصویر را به عنوان ورودی می گیرد و نوع محتوا را به صورت رشته ای برمی گرداند.
دستور شرطی switch دارای یک مورد است که بررسی می کند آیا فرمت تصویر PNG است. تابع اگر یک تصویر PNG با تصویر باشد، تکه بایت تصویر را رمزگشایی می کند. تابع رمزگشایی.
در نهایت، تابع ToJpeg یک بافر جدید ایجاد می کند و تصویر را با فرمت JPEG با تابع jpeg.Encode رمزگذاری می کند.
می توانید تصویر PNG را قبل از فراخوانی ToJpeg با تابع os.ReadFile بارگیری کنید:
func main() {
// 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!")
}
تابع اصلی قبل از فراخوانی تابع ToJpeg، تصویر PNG را از دایرکتوری مشخص شده می خواند. تابع ToJpeg یک برش بایتی از تصویر را با فرمت JPEG برمی گرداند.
تابع main فایل JPEG را با تابع os.WriteFile در مسیر مشخص شده می نویسد. پس از یک فرآیند تبدیل موفقیت آمیز، تابع اصلی یک پیام را به کنسول چاپ می کند.
تبدیل تصاویر از JPEG به PNG
JPEG یک فرمت با اتلاف است که برای عکس های پیچیده بهینه شده است. JPEG به نسبت فشرده سازی بالاتری دست می یابد و در نتیجه اندازه فایل کوچکتر می شود، البته با افت جزئی کیفیت.
برخلاف PNG، JPEG از شفافیت پشتیبانی نمی کند. در نمایش تصاویر عکاسی با رنگ ها و شیب های مختلف عالی است.
در اینجا نحوه تبدیل فایل output.jpg به یک فایل PNG با نام input.png آورده شده است:
import (
"bytes"
"fmt"
"image/jpeg"
"image/png"
"log"
"os"
)
// JpegToPng converts a JPEG image to PNG format
func JpegToPng(imageBytes []byte) ([]byte, error) {
img, err := jpeg.Decode(bytes.NewReader(imageBytes))
if err != nil {
return nil, err
}
buf := new(bytes.Buffer)
if err := png.Encode(buf, img); err != nil {
return nil, err
}
return buf.Bytes(), nil
}
تابع JpegToPng برش بایت تصویر را با تابع jpeg.Decode رمزگشایی می کند. این تابع یک بافر جدید برای رمزگذاری تصویر در فرمت PNG با تابع png.Encode ایجاد می کند.
در اینجا تابع اصلی است که تابع JpegToPng را فراخوانی می کند:
func main() {
// 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!")
}
تابع اصلی تصویر JPEG را از دایرکتوری مشخص شده می خواند و تابع JpegToPng را فراخوانی می کند. این تابع یک قطعه بایتی از تصویر را با فرمت PNG برمی گرداند.
Go بیشترین ویژگی هایی را که برای ساخت برنامه های خود در کتابخانه استاندارد خود نیاز دارید، ارائه می دهد
بسته تصویر یکی از چندین کتابخانه همه کاره در اکوسیستم Go است. به لطف بسته تصویری، می توانید کارهای تصویری را بدون اتکا به کتابخانه های خارجی انجام دهید.
Go همچنین بسته های همه کاره دیگری از جمله بسته http برای ساخت برنامه های مبتنی بر وب ارائه می دهد. بسته http شامل بیشتر ویژگی هایی است که برای ساخت سمت سرور یک برنامه وب به آن نیاز دارید.