亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

利用ChatGPT編寫一個Golang圖像壓縮函數(shù)

 更新時間:2023年04月25日 09:31:23   作者:xiaoz  
這篇文章主要為大家詳細介紹了如何利用ChatGPT幫我們寫了一個Golang圖像壓縮函數(shù),文中的示例代碼簡潔易懂,感興趣的小伙伴可以嘗試一下

最近在使用Wails開發(fā)ImgURL客戶端時,需要對圖片進行壓縮再上傳,為了提高效率,節(jié)省時間,這次直接讓ChatGPT來幫我完成這個需求。

提出需求

我對ChatGPT提出了如下要求:

請幫我編寫一個能夠接收圖片路徑并進行壓縮的Golang函數(shù)。該函數(shù)需要支持jpg和png格式的圖片,并且會校驗MIME類型。如果圖片類型不是jpg或png,則函數(shù)不會進行處理。壓縮后的圖片路徑與原路徑相同,比如/tmp/1.png經(jīng)過壓縮后依然為/tmp/1.png。函數(shù)的返回值為err。

第一次給我返回的代碼中并沒有去校驗MIME類型,于是我再次讓他跟進需求:

您似乎不是根據(jù)MIME類型來判斷而是根據(jù)擴展名來判斷的?請根據(jù)MIME類型來判斷,如果不是匹配的MIME類型,返回nil,壓縮后圖片路徑不改變,比如/tmp/1.png壓縮后的圖片路徑依然為/tmp/1.png

這次給的代碼看起來沒問題,但實際運行的時候并沒有壓縮圖片,原來MIME類型判斷錯了,繼續(xù)提問:

為什么我調(diào)用函數(shù)后圖片大小沒有任何變化?

ChatGPT勇于承認錯誤:

抱歉給您帶來困擾。我發(fā)現(xiàn)在代碼中有一個錯誤,http.DetectContentType 方法應(yīng)該接收文件的前512個字節(jié)而不是文件路徑。下面是修改后的 compressImage 函數(shù)。

這次給的代碼未做任何修改,可以成功運行并壓縮圖像。

package main

import (
    "errors"
    "image"
    "image/jpeg"
    "image/png"
    "mime"
    "net/http"
    "os"
)

func compressImage(imagePath string) error {
    file, err := os.Open(imagePath)
    if err != nil {
        return err
    }
    defer file.Close()

    // 讀取文件的前512個字節(jié)
    buffer := make([]byte, 512)
    _, err = file.Read(buffer)
    if err != nil {
        return err
    }
    file.Seek(0, 0)

    // 根據(jù)MIME類型檢查
    contentType := http.DetectContentType(buffer)

    var img image.Image
    var format string
    switch contentType {
    case "image/jpeg":
        img, err = jpeg.Decode(file)
        format = "jpeg"
    case "image/png":
        img, err = png.Decode(file)
        format = "png"
    default:
        return nil
    }

    if err != nil {
        return err
    }

    // 關(guān)閉并重新打開文件進行壓縮
    file.Close()
    file, err = os.OpenFile(imagePath, os.O_WRONLY|os.O_TRUNC, 0644)
    if err != nil {
        return err
    }
    defer file.Close()

    var opt jpeg.Options
    opt.Quality = 75 // 設(shè)置壓縮質(zhì)量為75

    switch format {
    case "jpeg":
        err = jpeg.Encode(file, img, &opt)
    case "png":
        encoder := png.Encoder{CompressionLevel: png.BestCompression}
        err = encoder.Encode(file, img)
    }

    return err
}

func main() {
    imagePath := "/tmp/1.png"
    err := compressImage(imagePath)
    if err != nil {
        println("Error compressing image:", err.Error())
    } else {
        println("Image compressed successfully")
    }
}

并且對代碼做出了解釋:

這個函數(shù)中,JPEG圖片采用有損壓縮,而PNG圖片采用無損壓縮。

對于JPEG圖片,壓縮質(zhì)量設(shè)置為75(范圍是1-100,數(shù)值越高,質(zhì)量越好,但文件大小也越大)。

對于PNG圖片,這個函數(shù)使用了最佳壓縮級別(png.BestCompression)。這會進行無損壓縮,保留圖像的所有原始信息,但可能會導(dǎo)致壓縮時間較長。

結(jié)語

正確使用ChatGPT確實能有效提高效率,但不能完全依賴ChatGPT。還需要自己的辨別能力,因為ChatGPT給出的答案也不完全正確。我們需要自己辨別和加以引導(dǎo),才能得到正確的答案。將ChatGPT視為輔助工具則非常不錯。此外,我們應(yīng)該分辨出哪些問題能夠由ChatGPT回答,哪些問題需要我們自己解決。

到此這篇關(guān)于利用ChatGPT編寫一個Golang圖像壓縮函數(shù)的文章就介紹到這了,更多相關(guān)Golang圖像壓縮函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解Golang time包中的time.Duration類型

    詳解Golang time包中的time.Duration類型

    在日常開發(fā)過程中,會頻繁遇到對時間進行操作的場景,使用 Golang 中的 time 包可以很方便地實現(xiàn)對時間的相關(guān)操作,本文講解一下 time 包中的 time.Duration 類型,需要的朋友可以參考下
    2023-07-07
  • 一些關(guān)于Go程序錯誤處理的相關(guān)建議

    一些關(guān)于Go程序錯誤處理的相關(guān)建議

    錯誤處理在每個語言中都是一項重要內(nèi)容,眾所周知,通常寫程序時遇到的分為異常與錯誤兩種,Golang中也不例外,這篇文章主要給大家介紹了一些關(guān)于Go程序錯誤處理的相關(guān)建議,需要的朋友可以參考下
    2021-09-09
  • Go中的應(yīng)用配置管理詳解

    Go中的應(yīng)用配置管理詳解

    這篇文章主要為大家介紹了Go中的應(yīng)用配置管理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-09-09
  • 一文帶你吃透Golang中的類型轉(zhuǎn)換

    一文帶你吃透Golang中的類型轉(zhuǎn)換

    Golang是一種強類型語言,所以Golang的類型轉(zhuǎn)換和C/C++ java等語言的類型轉(zhuǎn)換還有點區(qū)別,本文講通過一些簡單的示例帶大家深入了解一下Golang中的類型轉(zhuǎn)換,需要的可以參考下
    2023-05-05
  • golang中的jwt使用教程流程分析

    golang中的jwt使用教程流程分析

    這篇文章主要介紹了golang中的jwt使用教程,接下來我們需要講解一下Claims該結(jié)構(gòu)體存儲了token字符串的超時時間等信息以及在解析時的Token校驗工作,需要的朋友可以參考下
    2023-05-05
  • Go語言中利用http發(fā)起Get和Post請求的方法示例

    Go語言中利用http發(fā)起Get和Post請求的方法示例

    這篇文章主要給大家介紹了關(guān)于Go語言中利用http發(fā)起Get和Post請求的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-11-11
  • Go語言Gin處理響應(yīng)方式詳解

    Go語言Gin處理響應(yīng)方式詳解

    gin框架封裝了常用的數(shù)據(jù)格式方法響應(yīng)于客戶端,下面這篇文章主要給大家介紹了關(guān)于Go語言Gin處理響應(yīng)方式的相關(guān)資料,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2023-01-01
  • 如何有效控制Go線程數(shù)實例探究

    如何有效控制Go線程數(shù)實例探究

    這篇文章主要為大家介紹了如何有效控制?Go?線程數(shù)的問題探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2024-01-01
  • Go語言中的包Package詳解

    Go語言中的包Package詳解

    本文詳細講解了Go語言中的包Package,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • Golang使用Gin創(chuàng)建Restful API的實現(xiàn)

    Golang使用Gin創(chuàng)建Restful API的實現(xiàn)

    本文主要介紹了Golang使用Gin創(chuàng)建Restful API的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01

最新評論