インターネットの急速な発展に伴い、画像処理は Web 開発において避けられない部分となっており、Golang も例外ではありません。 Golang には、標準ライブラリの画像パッケージ、サードパーティ ライブラリの goimage、imagick など、画像処理用の非常に豊富なツール セットがすでにあります。
この記事では、読者が Golang で画像を処理する方法を理解できるように、Golang 画像処理の方法とテクニックを詳細に紹介します。
1. Golang 標準ライブラリの画像パッケージを使用する
画像パッケージは Golang で提供される標準画像操作ライブラリで、主に PNG などの一般的な画像ファイル形式を処理するために使用されます。 、JPEG、BMP、GIFなどの形式。画像ファイルのデコード、エンコード、トリミング、スケーリング、回転、変換などの機能を実装できる基本的なインターフェイスと関数のセットを提供します。
画像パッケージに基づいて画像スケーリング関数を実装する方法を見てみましょう:
package main import ( "image" "image/jpeg" "os" ) func main() { // 读取源图片文件 file, err := os.Open("source.jpg") if err != nil { panic(err) } defer file.Close() // 解码源图片文件 img, _, err := image.Decode(file) if err != nil { panic(err) } // 计算新图片尺寸 newWidth := 640 newHeight := (newWidth * int(img.Bounds().Dy())) / int(img.Bounds().Dx()) // 缩放图片 resized := image.NewRGBA(image.Rect(0, 0, newWidth, newHeight)) if err := resize(resized, img); err != nil { panic(err) } // 保存新图片文件 newFile, err := os.Create("resized.jpg") if err != nil { panic(err) } defer newFile.Close() // 编码新图片 if err := jpeg.Encode(newFile, resized, &jpeg.Options{Quality: 80}); err != nil { panic(err) } } // 缩放图片函数 func resize(dst *image.RGBA, src image.Image) error { sw, sh := src.Bounds().Dx(), src.Bounds().Dy() dw, dh := dst.Bounds().Dx(), dst.Bounds().Dy() scaleW, scaleH := float64(sw)/float64(dw), float64(sh)/float64(dh) if scaleW > scaleH { scaleH = scaleW } else { scaleW = scaleH } w, h := int(float64(sw)/scaleW), int(float64(sh)/scaleH) tmp := image.NewRGBA(image.Rect(0, 0, w, h)) for y := 0; y < h; y++ { for x := 0; x < w; x++ { tmp.Set(x, y, src.At(int(float64(x)*scaleW), int(float64(y)*scaleH))) } } return resize2(dst, tmp) } // 缩放图片函数 func resize2(dst *image.RGBA, src image.Image) error { sw, sh := src.Bounds().Dx(), src.Bounds().Dy() dw, dh := dst.Bounds().Dx(), dst.Bounds().Dy() scaleW, scaleH := float64(sw)/float64(dw), float64(sh)/float64(dh) if scaleW > scaleH { scaleH = scaleW } else { scaleW = scaleH } for y := 0; y < dh; y++ { for x := 0; x < dw; x++ { dst.Set(x, y, src.At(int(float64(x)*scaleW), int(float64(y)*scaleH))) } } return nil }
このコードは、最初にsource.jpgという名前の画像ファイルを読み取り、次にimage.Decodeを呼び出します。 () 関数は、画像ファイルを Golang の image.Image オブジェクトにデコードし、次に、計算プロセスで元の画像のアスペクト比を使用して、スケーリングされた画像サイズが歪まないように新しい画像のサイズを計算します。 、jpeg.Encode() 関数を呼び出して、スケーリングされた画像を resize.jpg という名前の新しいファイルとして保存します。
2. goimage サードパーティ ライブラリを使用する
goimage は、Golang の強力な画像処理ライブラリであり、ズームなどのさまざまな画像処理操作を実装できる豊富な関数とインターフェイスを提供します。 . 、回転、切り抜き、フィルターなど。その機能はそれだけではなく、画像のスティッチング、切り抜き、HDR 合成などのより複雑な操作も提供します。
goimage に基づいて画像スケーリング操作を実装する方法を示しましょう:
package main import ( "github.com/disintegration/imaging" "image/jpeg" "os" ) func main() { // 读取源图片文件 file, err := os.Open("source.jpg") if err != nil { panic(err) } defer file.Close() // 解码源图片文件 img, err := jpeg.Decode(file) if err != nil { panic(err) } // 缩放图片 resized := imaging.Resize(img, 640, 0, imaging.Lanczos) // 保存新图片文件 newFile, err := os.Create("resized.jpg") if err != nil { panic(err) } defer newFile.Close() // 编码新图片 if err := jpeg.Encode(newFile, resized, &jpeg.Options{Quality: 80}); err != nil { panic(err) } }
このコードは画像スケーリング関数も実装していますが、手動ではなく goimage ライブラリ関数で imaging.Resize() を使用します。スケーリング アルゴリズムを自分で実装します。これにより、画質と安定性を確保しつつ、開発者の負担をある程度軽減することができます。
3. imagick サードパーティ ライブラリを使用する
標準ライブラリの image パッケージと goimage サードパーティ ライブラリに加えて、imagick ライブラリを使用して Golang で画像処理を実装することもできます。 。 Imagick は、ImageMagick の Golang バウンド バージョンであり、基礎となる画像処理機能と高度な画像操作機能を提供します。
imagick ライブラリを使用して画像スケーリング関数を実装する方法を示しましょう:
package main import ( "github.com/gographics/imagick/imagick" "io/ioutil" "os" ) func main() { // 初始化imagick库 err := imagick.Initialize() if err != nil { panic(err) } defer imagick.Terminate() // 读取源图片文件 file, err := os.Open("source.jpg") if err != nil { panic(err) } defer file.Close() // 解码源图片文件 buffer, err := ioutil.ReadAll(file) if err != nil { panic(err) } wand := imagick.NewMagickWand() if err := wand.ReadImageBlob(buffer); err != nil { panic(err) } // 缩放图片 if err := wand.ResizeImage(640, 0, imagick.FILTER_LANCZOS, 1); err != nil { panic(err) } // 保存新图片文件 if err := wand.WriteImageFile(imagick.NewMagickWand().NewCollection(), "resized.jpg"); err != nil { panic(err) } }
このコードは、imagick ライブラリの初期化と画像スケーリング操作を実装します。具体的な実装プロセスは同じです。前の 2 つの例とほぼ同じです。ただし、imagick ライブラリのインターフェイスは、Golang を使用する通常の習慣とは異なる場合があるため、特別な注意が必要であることに注意してください。同時に、imagick ライブラリは、開発者が実際のニーズに応じて使用できる豊富な画像操作インターフェイスも提供します。
要約すると、この記事では主に、Golang で画像を処理するいくつかの方法 (標準ライブラリの画像パッケージの使用、goimage サードパーティ ライブラリの使用、imagick サードパーティ ライブラリの使用) について説明します。サードパーティライブラリが使用できない場合は、標準ライブラリのイメージパッケージを使用することをお勧めします。より豊富で複雑な画像操作を行うには、goimage または imagick の 2 つのライブラリを使用できます。最後に、読者の皆様がご自身の状況に応じて適切な画像処理方法を選択していただければ幸いです。
以上がgolangで画像を加工する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

golangisidealforporformance-criticalapplicationsandconcurrentprogramming、whilepythonexcelsindatascience、rapyプロトタイプ、およびandversitielity.1)for-high-duetoitsefficiency and concurrencyfeatures.2

GolangはGoroutineとChannelを通じて効率的な並行性を実現します。1。Goroutineは、Goキーワードで始まる軽量のスレッドです。 2.チャンネルは、ゴルチン間の安全な通信に使用され、人種の状態を避けます。 3.使用例は、基本的および高度な使用法を示しています。 4.一般的なエラーには、ゴルンレースで検出できるデッドロックとデータ競争が含まれます。 5.パフォーマンスの最適化では、チャネルの使用を削減し、ゴルチンの数を合理的に設定し、Sync.poolを使用してメモリを管理することを示唆しています。

Golangは、システムプログラミングと高い並行性アプリケーションにより適していますが、Pythonはデータサイエンスと迅速な発展により適しています。 1)GolangはGoogleによって開発され、静的にタイピングし、シンプルさと効率を強調しており、高い並行性シナリオに適しています。 2)Pythonは、Guidovan Rossumによって作成され、動的に型付けられた簡潔な構文、幅広いアプリケーション、初心者やデータ処理に適しています。

Golangは、パフォーマンスとスケーラビリティの点でPythonよりも優れています。 1)Golangのコンピレーションタイプの特性と効率的な並行性モデルにより、高い並行性シナリオでうまく機能します。 2)Pythonは解釈された言語として、ゆっくりと実行されますが、Cythonなどのツールを介してパフォーマンスを最適化できます。

GO言語は、同時プログラミング、パフォーマンス、学習曲線などにユニークな利点を持っています。1。GoroutineとChannelを通じて同時プログラミングが実現されます。これは軽量で効率的です。 2。コンピレーション速度は高速で、操作性能はC言語のパフォーマンスに近いです。 3.文法は簡潔で、学習曲線は滑らかで、生態系は豊富です。

GolangとPythonの主な違いは、並行性モデル、タイプシステム、パフォーマンス、実行速度です。 1. GolangはCSPモデルを使用します。これは、同時タスクの高いタスクに適しています。 Pythonは、I/O集約型タスクに適したマルチスレッドとGILに依存しています。 2。Golangは静的なタイプで、Pythonは動的なタイプです。 3.ゴーランコンパイルされた言語実行速度は高速であり、Python解釈言語開発は高速です。

Golangは通常Cよりも遅くなりますが、Golangはプログラミングと開発効率の同時により多くの利点があります。1)Golangのゴミ収集と並行性モデルにより、同時性の高いシナリオではうまく機能します。 2)Cは、手動のメモリ管理とハードウェアの最適化により、より高いパフォーマンスを取得しますが、開発の複雑さが高くなります。

GolangはクラウドコンピューティングとDevOpsで広く使用されており、その利点はシンプルさ、効率性、および同時プログラミング機能にあります。 1)クラウドコンピューティングでは、GolangはGoroutineおよびチャネルメカニズムを介して同時リクエストを効率的に処理します。 2)DevOpsでは、Golangの高速コンピレーションとクロスプラットフォーム機能により、自動化ツールの最初の選択肢になります。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境
