最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

提出需求

我對(duì)ChatGPT提出了如下要求:

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

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

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

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

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

ChatGPT勇于承認(rèn)錯(cuò)誤:

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

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

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個(gè)字節(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)閉并重新打開文件進(jì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")
    }
}

并且對(duì)代碼做出了解釋:

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

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

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

結(jié)語

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

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

相關(guān)文章

  • 使用Golang實(shí)現(xiàn)AES加解密的代碼示例

    使用Golang實(shí)現(xiàn)AES加解密的代碼示例

    在現(xiàn)代的數(shù)據(jù)安全中,加密和解密是極其重要的一環(huán),其中,高級(jí)加密標(biāo)準(zhǔn)(AES)是最廣泛使用的加密算法之一,本文將介紹如何使用Golang來實(shí)現(xiàn)AES加密和解密,需要的朋友可以參考下
    2024-04-04
  • GO中的條件變量sync.Cond詳解

    GO中的條件變量sync.Cond詳解

    條件變量是基于互斥鎖的,它必須基于互斥鎖才能發(fā)揮作用,條件變量的初始化離不開互斥鎖,并且它的方法有點(diǎn)也是基于互斥鎖的,這篇文章主要介紹了GO的條件變量sync.Cond,需要的朋友可以參考下
    2023-01-01
  • Go語言中g(shù)oroutine和WaitGroup的使用示例詳解

    Go語言中g(shù)oroutine和WaitGroup的使用示例詳解

    goroutine 是Go中一個(gè)輕量級(jí)的線程, 只需要一個(gè)go關(guān)鍵字就可以創(chuàng)建一個(gè)goroutine,這篇文章主要介紹了Go語言中g(shù)oroutine和WaitGroup的使用,需要的朋友可以參考下
    2023-03-03
  • golang json數(shù)組拼接的實(shí)例

    golang json數(shù)組拼接的實(shí)例

    這篇文章主要介紹了golang json數(shù)組拼接的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • 解析golang 標(biāo)準(zhǔn)庫template的代碼生成方法

    解析golang 標(biāo)準(zhǔn)庫template的代碼生成方法

    這個(gè)項(xiàng)目的自動(dòng)生成代碼都是基于 golang 的標(biāo)準(zhǔn)庫 template 的,所以這篇文章也算是對(duì)使用 template 庫的一次總結(jié),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2021-11-11
  • 詳解如何解決golang定時(shí)器引發(fā)的id重復(fù)問題

    詳解如何解決golang定時(shí)器引發(fā)的id重復(fù)問題

    這篇文章主要為大家詳細(xì)介紹了如何解決golang定時(shí)器引發(fā)的id重復(fù)問題,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-04-04
  • Go語言中獲取IP地址的方法小結(jié)

    Go語言中獲取IP地址的方法小結(jié)

    這篇文章主要為大家詳細(xì)介紹了Go語言中獲取IP地址的常用方法,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-12-12
  • Go語言Goroutinue和管道效率詳解

    Go語言Goroutinue和管道效率詳解

    這篇文章主要為大家介紹了Go語言Goroutinue和管道效率使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • GO如何模擬流操作實(shí)現(xiàn)示例探究

    GO如何模擬流操作實(shí)現(xiàn)示例探究

    這篇文章主要為大家介紹了GO如何模擬流操作實(shí)現(xiàn)示例探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • golang使用OpenTelemetry實(shí)現(xiàn)跨服務(wù)全鏈路追蹤詳解

    golang使用OpenTelemetry實(shí)現(xiàn)跨服務(wù)全鏈路追蹤詳解

    這篇文章主要為大家介紹了golang使用OpenTelemetry實(shí)現(xiàn)跨服務(wù)全鏈路追蹤詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09

最新評(píng)論

河津市| 通化县| 万山特区| 博兴县| 瓮安县| 札达县| 股票| 隆子县| 高陵县| 昌都县| 邛崃市| 靖西县| 宁波市| 昂仁县| 克东县| 方城县| 永修县| 景宁| 温州市| 黑水县| 华阴市| 西青区| 寿宁县| 调兵山市| 德格县| 怀安县| 通辽市| 阜城县| 玛沁县| 兴仁县| 贵阳市| 鹤庆县| 若尔盖县| 遵义市| 阜新市| 子长县| 高台县| 祥云县| 中山市| 沽源县| 沾益县|