ホームページ  >  記事  >  バックエンド開発  >  golang で画像の現在の「品質」を知るにはどうすればよいですか?ファイルサイズを減らす必要がある

golang で画像の現在の「品質」を知るにはどうすればよいですか?ファイルサイズを減らす必要がある

王林
王林転載
2024-02-15 10:57:08946ブラウズ

golang で画像の現在の「品質」を知るにはどうすればよいですか?ファイルサイズを減らす必要がある

php こんにちは、Xiaobian Yuzai! golang では、画像の現在の品質を知り、ファイル サイズを削減したい場合、image/jpeg パッケージの DecodeConfig 関数を使用して、画像の幅、高さ、カラー モードなどの画像の基本情報を取得できます。 、など。その後、イメージ パッケージのサイズ変更機能を使用してイメージのサイズを変更し、ファイル サイズを減らすことができます。さらに、image/jpeg パッケージの Options 構造を使用して画像の品質パラメータを設定し、品質パラメータの値を調整することでファイル サイズをさらに削減することもできます。この短い回答がお役に立てば幸いです。

質問内容

golangで画像のファイルサイズを削減・圧縮したいと考えています。 jpeg.Encode を使用し、品質 75 の引数としてオプションを渡すと、10MB の画像が 18MB の画像になります...理由がわかりませんが、これがこのライブラリの品質の概念ですか?

また、エンコード前にどちらが元の品質であるかを知る方法を知りたいです。わかっていれば、より小さい値に設定できるか、画像の高さと幅を 10 にリサイズするなどの他のことを試してみるのが良いと思います。 。

jpeg.Encode関数のオプションパラメータのquality属性の基準を知りたいです。画像ファイルのサイズと画像ファイルのサイズを減らす方法についてさらに知識を深めたいと考えています。

解決策

JPEG 品質パラメータは画像の特性ではなく、JPEG エンコード プロセスの特性です。 JPEG は非可逆エンコードであり、エンコードされた画像を正確な元の画像にデコードできないことを意味するため、元の画像をどの程度忠実に複製するかをエンコーダに指定できます。品質 100 では損失はほとんど見られませんが、低品質のエンコーダはそれほど激しく機能しません。したがって、品質パラメータが大きいほど、エンコーダはより多くの情報を保持しようとするため、ファイル サイズも大きくなります。 ]

エンコードされたファイルが元のファイルよりも大きくなる理由を直観的に理解するために、人間の音声における「圧縮」の例を次に示します (JPEG ではありませんが、情報理論の観点からは同じ原則が適用されます)。

000000000000000000000000000000000000000000000000 は、「50 個のゼロ」、つまり 50:12 比率の圧縮として表すことができます (つまり、ソース コードの長さが 4 倍以上短縮されます)。

01101 は「ゼロが 1 つ、1 が 2 つ、ゼロが 1 つ、1 が 1 つ」です。5:34 比率の圧縮は失敗し、エンコードされた値は元の値のほぼ 7 倍になります。

この写真 (JPEG の Wikipedia ページから) は、品質パラメータと結果の画像を左の 0 から右の 100 まで示しています。

エンコーダーは、画像をエンコードしようとしない限り、結果がどうなるかを知る方法がありません。画像に大きく依存します。 JPEG はカラー グラデーションのエンコードに非常に優れていますが、シャープなエッジのエンコードにも非常に優れています。したがって、写真の圧縮は非常にうまくできますが、写真の圧縮などは非常にうまくいかない場合があります。静的なノイズ。

これは、画像が JPEG エンコードされていない限り、「エンコード前の元の品質」がないことを意味します。画像が既に JPEG エンコードされており、それを再エンコードしようとすると、通常はサイズがほとんど増加しません (エンコーダーは画像をコピーするだけでなく、以前にエンコードされた画像もコピーしようとするため)。すでに圧縮されているファイルを圧縮しようとするのと同じです。別の方法でエンコードされた画像をトランスコードすると、画像と以前に使用されたエンコードに応じて、ファイル サイズが削減される場合とそうでない場合があります。

以上がgolang で画像の現在の「品質」を知るにはどうすればよいですか?ファイルサイズを減らす必要があるの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。