Go 圖像處理

Golang中的image包提供了基本的圖像類型、顏色模型、以及用于處理圖像的各種函數和接口。

常用類型與接口

image.Image?接口

這是Go語言中處理圖像的核心接口,定義了所有圖像必須實現的方法:

type Image interface {// Bounds returns the domain for which At can return non-zero color.// The bounds do not necessarily contain the point (0, 0).Bounds() Rectangle// At returns the color of the pixel at (x, y).// At must panic if x or y are outside the bounds of the image.At(x, y int) color.Color
}

color.Color?接口

表示一種顏色,需要實現以下方法:?

type Color interface {// RGBA returns the alpha-premultiplied red, green, blue and alpha values// for the color. Each value ranges within [0, 0xffff], but is represented// by a uint32 so that multiplying by a blend factor up to 0xffff will not// overflow.RGBA() (r, g, b, a uint32)
}

color.RGBA?結構體

實現了color.Color接口,代表一個由紅綠藍透明度組成的顏色:?

type RGBA struct {R, G, B, A uint8
}

image.Decode

從輸入流(如文件或網絡連接)解碼圖像,并返回一個實現了image.Image接口的對象:

func Decode(r io.Reader) (img image.Image, err error)
file, err := os.Open("example.png")
if err != nil {panic(err)
}
defer file.Close()img, _, err := image.Decode(file)
if err != nil {panic(err)
}
// 使用解碼后的img進行后續操作

image.DecodeConfig

僅解碼圖像的配置信息而不加載完整圖像數據:?

func DecodeConfig(r io.Reader) (cfg image.Config, err error)
file, err := os.Open("example.gif")
if err != nil {panic(err)
}
defer file.Close()config, err := image.DecodeConfig(file)
if err != nil {panic(err)
}
fmt.Printf("Image dimensions: %d x %d, Color model: %v\n", config.Width, config.Height, config.ColorModel)

案例

package mainimport ("image""image/draw""image/jpeg""os"
)func main() {// 讀取原圖file, err := os.Open("需要時jpeg格式的才行.jpeg")if err != nil {panic(err)}defer file.Close()img, err := jpeg.Decode(file)if err != nil {panic(err)}width := 600height := 400// 創建一個新的圖片,大小為指定的寬和高newImg := image.NewRGBA(image.Rect(0, 0, width, height))// 裁剪圖片   使用 draw.Draw 簡單縮放(質量較低,可能會出現像素化)draw.Draw(newImg, newImg.Bounds(), img, image.Point{}, draw.Src)// 重新編碼并保存outputFile, err := os.Create("output.jpg")if err != nil {panic(err)}defer outputFile.Close()// 設置壓縮選項outputQuality := 80opts := &jpeg.Options{Quality: outputQuality,}err = jpeg.Encode(outputFile, newImg, opts)if err != nil {panic(err)}
}

?使用?draw.Src?方式將原圖直接繪制到目標圖像上,這相當于最簡單的像素復制,可能會導致圖像質量下降,特別是對于縮小操作時,會出現明顯的像素化現象。這種方法適用于對圖像質量要求不高的場景,或者作為臨時解決方案

請注意,這種方法并不推薦用于高質量的圖像縮放,因為它沒有采用任何插值算法來平滑過渡像素,導致縮放后的圖像質量較差。對于實際項目中對圖像大小調整的需求,建議使用專門的圖像處理庫如?github.com/nfnt/resize它提供了多種高質量的插值算法(如 Lanczos 等),能夠更好地保持圖像細節和視覺效果。

這些只是image包中的一部分功能。根據實際需求,還可以使用其他子包(如image/jpeg,?image/png,?image/gif等)進行特定格式的編碼和解碼,或利用image/draw包進行更復雜的圖像合成操作。

使用第三方包處理

imaging一個簡單、實用的圖像處理工具

文檔:

  • https://github.com/disintegration/imaging

  • https://pkg.go.dev/github.com/disintegration/imaging

  • Go Image Filtering Toolkit: https://github.com/disintegration/gift

安裝

????????go?get?github.com/disintegration/imaging?

package mainimport ("github.com/disintegration/imaging""log"
)func main() {// 打開一個圖片文件src, err := imaging.Open("./1716282750475.jpg")if err != nil {log.Fatalf("無法打開圖像: %v", err)}// 生成縮略圖dst := imaging.Thumbnail(src, 100, 100, imaging.Lanczos)// 保存err = imaging.Save(dst, "thumbnail.jpg")if err != nil {log.Fatalf("無法保存圖像: %v", err)} else {log.Println("保存圖像成功")}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/14268.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/14268.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/14268.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

rocketmq 學習二 基本概念

教程:基本概念 | RocketMQ 視頻教程 https://www.bilibili.com/video/BV1d5411y7UW?vd_sourcef1bd3b5218c30adf0a002c8c937e0a27 版本:5.0 一 基本概念 1.1 生產者/Producer 1.1.1 定義 消息發布者。是構建并傳輸消息到服務端的運行實體。…

異眾比率(variation ratio)

異眾比率(variation ratio)是指非眾數組的頻數占總頻數的比率,其計算公式為: 其中,為眾數組的頻數。 異眾比率主要用于衡量眾數對一組數據的代表程度。異眾比率越大,說明非眾數組的頻數占總頻數的比重越大&#xff0…

harbor 認證

Harbor 認證過程 Harbor以 Docker Registry v2認證為基礎,添加上一層權限保護。1.v2 集成了一個安全認證的功能,將安全認證暴露給外部服務,讓外部服務去實現2.強制用戶每次Docker pull/push請求都要帶一個合法的Token,Registry會…

python的requests爬蟲模塊使用代理ip方法---集合

形式一 import requests proxies {http:128.3.74.224:2890,https:128.3.74.224:2890} ip requests.get(http://httpbin.org/ip,proxiesproxies) print(ip.text)形式二 形式一不行的情況下,試試形式二 import requests proxies {http:http://127.0.0.1:7890,http…

【AHK V2】設計模式之命令模式

目錄 情景劇場什么是命令模式優缺點優點缺點 使用命令模式的步驟命令模式代碼示例合理使用AI工具自動生成代碼 情景劇場 我們來設想一個場景: 你進入一家餐館,餐館只有老板一個人(老板即廚師)。 “老板,一份小炒肉&am…

Vue插槽solt如何傳遞具名插槽的數據給子組件?

在Vue中,你可以通過作用域插槽(scoped slots)來傳遞數據給子組件。這同樣適用于具名插槽。首先,你需要在子組件中定義一個具名插槽,并通過v-slot指令傳遞數據。例如: 子組件(ChildComponent.vu…

自用RedisConfig的配置,更改key為string和value json的序列化,避免set亂的key

自用RedisConfig的配置,更改key為string和value json的序列化,避免set亂的key,使用StringRedisTemplate也可以解決,保證了redis set的值是正確的 Configuration public class RedisConfig {//更改key為string和value json的序列化…

吃透1850道真題和解析備考AMC8和AMC(1020240524持續發布)

多做真題,吃透真題和背后的知識點是備考AMC8、AMC10有效的方法之一,通過做真題,可以幫助孩子找到真實競賽的感覺,而且更加貼近比賽的內容,可以通過真題查漏補缺,更有針對性的補齊知識的短板。 今天我們繼續…

在新cloud上啟動備份數據庫

情況介紹:在云上劃拉一塊地方建立本地數據庫測試環境,通過數據庫備份包恢復數據并啟動。 1.在云上或者你自己的server上安裝Percona Server for MySQL,步驟如下 Use APT repositories - Percona Server for MySQL How to Install or Upgra…

java實現List對象轉geojson文本返回前端

1.業務需求 查詢帶有經緯度數據的list列表,將其轉為geojson格式給前端。 2.GeoJson格式說明 GeoJSON是一種對各種地理數據結構進行編碼的格式,基于Javascript對象表示法(JavaScript Object Notation, 簡稱JSON)的地理空間信息數據交換格式。GeoJSON對…

計算機系統的層次結構

操作系統的定義 操作系統(Operating System, OS)是指控制和管理整個計算機系統的硬件和軟件資源,并合理地組織調度計算機的工作和資源的分配;以提供給用戶和其他軟件方便的接口和環境;它是計算機系統中最基…

GBase 8s 如何查看回滾的事務 和對應的SQL

描述: 如何查看當前數據庫中是否有事務在回滾, 如果有, 具體是哪條 SQL 在回滾? 解決辦法: 方法1: 通過 onstat -u|grep RP; 可以獲取相關的 sessionid。 通過 onstat -g ses sid 獲取 SQL&a…

【多模態融合】Cross Modal Transformer: Towards Fast and Robust 3D Object Detection

論文鏈接:Cross Modal Transformer: Towards Fast and Robust 3D Object Detection 代碼鏈接:https://github.com/junjie18/CMT 作者:Junjie Yan, Yingfei Liu, Jianjian Sun, Fan Jia, Shuailin Li, Tiancai Wang, Xiangyu Zhang 發表單位…

字符串的周期:每一期都有那么幾位

【題目描述】 如果一個字符串可以由某個長度為k的字符串重復多次得到,則稱該串以k為周期。例 如,abcabcabcabc以3為周期(注意,它也以6和12為周期)。 輸入一個長度不超過80的字符串(不含空格),輸出其最小周期。 輸入第一行表示有T組數據,后續是T行字符串。輸出的每組…

性能測試工具

性能測試工具 1.Jmeter 環境搭建1.安裝JDK2.安裝Jmeter1.下載2.安裝3.環境配置 3.Jmeter 文件目錄介紹1.bin目錄2.docs 目錄3.printable_docs目錄4.lib目錄 4.修改默認配置1.漢化配置2.修改主題 5.元件的基本介紹6.元件的作用域作用域的原則 7.元件的執行順序 1.Jmeter 環境搭建…

Linux基礎-目錄命令

目錄文件命令 一、概述二、文件目錄1. 目錄信息1. pwd:顯示當前目錄2. cd :切換目錄3. ls:顯示目錄中的文件信息 2. 操作目錄1. mkdir : 創建目錄2. rm : 刪除目錄3. mv : 移動、重命名目錄4. cp :拷貝命令 一、概述 這里記錄一下…

【Pytorch】16.使用ImageFolder加載自定義MNIST數據集訓練手寫數字識別網絡(包含數據集下載)

數據集下載 MINST_PNG_Training在github的項目目錄中的datasets中有MNIST的png格式數據集的壓縮包 用于訓練的神經網絡模型 自定義數據集訓練 在前文【Pytorch】13.搭建完整的CIFAR10模型我們已經知道了基本搭建神經網絡的框架了,但是其中的數據集使用的torchvision…

Flutter 中的 WidgetInspector 小部件:全面指南

Flutter 中的 WidgetInspector 小部件:全面指南 Flutter 的 WidgetInspector 是一個強大的工具,它允許開發者在運行時檢查和操作他們的 widget 樹。這在調試復雜的布局和 widget 結構時尤其有用。本文將為您提供一個全面的指南,幫助您了解如…

Excel 按順序去重再編號

Excel的A有重復數據: A1Cow2Chicken3Horse4Butterfly5Cow 現在要去除重復,用自然數按順序進行編號,結果寫在相鄰列: AB1Cow12Chicken23Horse34Butterfly45Cow1 使用 SPL XLL,輸入公式并向下拖: spl(&q…

RISC-V壓縮指令擴展測試

概述 RISC-V定義了壓縮指令擴展(compressed instruction-set extension ),命名為“C”擴展。壓縮指令使用16位寬指令替換32位寬指令,從而減少代碼量。這個C擴展可運用在RV32、RV64和RV128指令集上,通常使用“RVC”來表…