خبر و ترفند روز

خبر و ترفند های روز را اینجا بخوانید!

نحوه تبدیل تصویر PNG به JPEG با استفاده از Go

این ابزارهای خط فرمان مفید، تطبیق پذیری Golang را نشان می دهد.

تبدیل فرمت تصویر در توسعه نرم افزار برای ایجاد سازگاری و مدیریت کارآمد تصویر در سیستم های مختلف حیاتی است. شما می توانید ذخیره سازی، انتقال، رندر و دستکاری تصویر را با تبدیل تصاویر بین فرمت ها بهینه کنید.

بسته های زیادی برای تبدیل فرمت تصویر در اکوسیستم Go وجود دارد و Golang یک بسته تصویری برای قالب بندی و تبدیل تصویر ارائه می دهد. بسته تصویری عملکردهای اولیه تصویر دوبعدی، از جمله ویژگی هایی برای رمزگشایی، رمزگذاری، تغییر اندازه و چرخش تصاویر را ارائه می دهد.

شروع کار با بسته تصویر

نمای کلی مستندات بسته تصویر

کتابخانه تصویر داخلی Go عملکرد جامعی را برای کار با تصاویر در فرمت های مختلف ارائه می دهد. بسته تصویر از خواندن، نوشتن و دستکاری تصاویر پشتیبانی می کند.

بسته تصویری از چندین نوع فایل تصویری و فرمت‌ها از جمله JPEG، PNG، GIF و BMP پشتیبانی می‌کند. این به شما امکان می دهد تصاویر را از فایل ها یا جریان ها بخوانید و رمزگشایی کنید و تصاویر را در فایل ها یا جریان ها رمزگذاری و بنویسید. این کار کار با انواع مختلف تصاویر در Go را بدون توجه به فرمت آنها آسان می کند.

این کتابخانه همچنین قابلیت های گسترده ای را برای دستکاری و پردازش تصویر ارائه می دهد. بسته تصویر روش‌هایی را برای دسترسی به پیکسل‌های مجزا فراهم می‌کند، که امکان دستکاری سطح پایین را برای کارهایی مانند تغییر مقادیر پیکسل یا اعمال فیلترهای سفارشی فراهم می‌کند.

علاوه بر این، این بسته از مدل‌های رنگی پشتیبانی می‌کند و ابزارهایی برای تبدیل بین نمایش‌های رنگی مختلف فراهم می‌کند. این برای کار با تصاویر در فضاهای رنگی مختلف مفید است.

تبدیل تصاویر از PNG به JPEG

فرمت‌های PNG و JPEG معمولاً مورد استفاده قرار می‌گیرند که هر کدام ویژگی‌های متفاوتی دارند. PNG یک فرمت بدون تلفات است که جایگزین GIF می شود و از تصاویر با کیفیت بالا با داده های تصویر حفظ شده و شفافیت پشتیبانی می کند. PNG برای تصاویر با لبه های واضح، متن یا مناطقی با رنگ یکنواخت مناسب است.

مطلب مرتبط:   نحوه استفاده از عملیات پروژه و انتخاب در SQL را بیاموزید

بسته تصویر شامل بسته های 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 برمی گرداند.

مطلب مرتبط:   مصرف API های RESTful With Go

تابع main فایل JPEG را با تابع os.WriteFile در مسیر مشخص شده می نویسد. پس از یک فرآیند تبدیل موفقیت آمیز، تابع اصلی یک پیام را به کنسول چاپ می کند.

نتیجه تبدیل تصویر PNG به JPG است

تبدیل تصاویر از 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 برمی گرداند.

مطلب مرتبط:   چگونه یک برنامه CRUD لیست کار بسازیم و وضعیت های آن را در React مدیریت کنیم

Go بیشترین ویژگی هایی را که برای ساخت برنامه های خود در کتابخانه استاندارد خود نیاز دارید، ارائه می دهد

بسته تصویر یکی از چندین کتابخانه همه کاره در اکوسیستم Go است. به لطف بسته تصویری، می توانید کارهای تصویری را بدون اتکا به کتابخانه های خارجی انجام دهید.

Go همچنین بسته های همه کاره دیگری از جمله بسته http برای ساخت برنامه های مبتنی بر وب ارائه می دهد. بسته http شامل بیشتر ویژگی هایی است که برای ساخت سمت سرور یک برنامه وب به آن نیاز دارید.