web-dev-qa-db-ja.com

画像サイズを変更せずに、非常に大きな画像のファイルサイズを縮小する

潜在的に非常に大きなPNGファイルのアップロードを処理するアプリケーションを検討してください。

アップロードしたファイルはすべて、後で取得できるようにディスクに保存する必要があります。ただし、PNGファイルのサイズは最大30 MBですが、ディスクストレージの制限により、ファイルサイズごとに最大1 MBが与えられます。

問題は、最大30 MBのファイルサイズの入力PNGを取得し、1 MB未満のファイルサイズの出力PNGを生成することです。

この操作は明らかに損失を伴います。画質や色などの低下は問題ありません。ただし、変更してはならない1つのことは、画像の寸法です。したがって、ディメンション800x600の入力ファイルは、ディメンション800x600の出力ファイルを生成する必要があります。

上記の要件は厳密であり、変更できません。

ImageMagick(または他のオープンソースツール)を使用して、画像のサイズを変更せずに、最大30 MBの入力PNGファイルのファイルサイズをファイルごとに最大1 MBに縮小するにはどうすればよいですか?

34
knorv

PNGは非可逆画像形式ではないため、画像を別の形式(ほとんどの場合JPEG)に変換する必要があります。 JPEGには設定可能な「品質」係数があります。画像が十分に小さくなるまで、品質係数を単純に下げ続けることができます。これらはすべて、画像の解像度を変更せずに実行できます。

明らかに、画像によっては、視覚的な品質の低下がかなりの場合があります。 JPEGは、カメラからの写真などの「真の人生」画像に最適です。ロゴ、スクリーンショット、または明から暗への「シャープ」な遷移を伴うその他の画像に対しても同様に機能しません。 (一方で、PNGは逆の動作をします。ロゴなどに最適です。)

ただし、800x600では、JPEGを1MB未満に下げることは非常に簡単です。 (これらの小さなサイズで30MBのファイルが表示されるのは非常に驚きです。)実際、uncompressedでも、画像は約1.4MBしかありません。

800 pixels * 600 pixels * 3 Bytes / color = 1,440,000 Bytes = 1.4MB

したがって、イメージを1MBにするには、圧縮比1.4:1のみが必要です。画像の種類に応じて、PNG圧縮はそのレベルの圧縮を提供します。そうでない場合、JPEGはほぼ確実にできます。10:1のオーダーのJPEG圧縮率は珍しいことではありません。繰り返しますが、出力の品質/サイズは画像の種類によって異なります。

最後に、しばらくの間ImageMagickを使用していませんが、特定の品質係数を使用して画像を再圧縮するオプションがあることはほぼ確実です。ドキュメントを読んで、実験を開始してください!

編集:ImageMagickを使えば、実際、非常に簡単なはずです。 docs から:

$magick> convert input.png -quality 75 output.jpg

適切な出力が得られるまで、品質値で遊んでください。

45
Eric Pi

800x600の解像度で30MBの画像が500ビット/ピクセルを保存しているため、あなたの例は厄介です。明らかに非現実的です。実数を教えてください。

一方、私が試みる「安くて陽気な」アプローチは次のようになります。画像を6倍に縮小し、次に6倍に拡大してから、PNG圧縮を実行します。運がよければ、画像サイズを36分の1に削減できます。運が悪ければ、節約量は6倍になります。

pngtopng big.png | pnmscale -reduce 6 | pnmscale 6 | pnmtopng > big.png

それだけでは不十分な場合は、色の数を減らすために(小さな画像上で)ppmquantを中央に投げることができます。 (例は netpbm / pbmplus です。これはImageMagickよりも簡単に理解できます。)

そのような解決策が妥当かどうかを知るには、問題の真の数を知る必要があります。

また、情報を永久に破棄する場合は、JPEG圧縮を使用することをお勧めします。JPEG圧縮は、情報を適切に失わせるように設計されています。 JPEGがアプリケーションに適さない理由はありますか?

7
Norman Ramsey

画像ファイルのサイズは画像のサイズと色の数に直接関係しているため、色の数を減らすという選択肢が1つだけあるようです。

また、最大30MBから1MBまでは、非常に大幅に削減されます。

モノクロに変換してこの比率を達成することは困難です。

4
pavium

それは最後に何を望むかに大きく依存します。サイズを維持しながら色の数を減らすのが好きです。多くの場合、減らされた色は重要ではありません。次に、色を254に減らす例を示します。

convert -colors 254 in.png out.png
3
esse

pngquant ユーティリティを試すことができます。インストールと使用は非常に簡単です。また、目に見える品質の低下なしに、PNGを大量に圧縮できます。

インストールしたら、次のようにしてください。

pngquant yourfile.png
pngquant --quality=0-70 yourfile.png

デモイメージ(imagemagickで生成)の場合、最初のコマンドは350KBを110KBに減らし、2番目のコマンドはそれを65KBに減らします。

2
  • ステップ1:画像を元のサイズの1/16に縮小します。
  • ステップ2:色の量を減らします。
  • ステップ3:画像のサイズを元のサイズに戻します。
1
pieter

ピクセルサイズを保持する必要があることはわかっていますが、ピクセルサイズを小さくし、画像と共に保存されているDPIを調整して、表示サイズを保持できますか?画像の表示に使用するクライアントによって異なりますが、ほとんどの場合はこれを確認する必要があります。ウェブ上の画像を使用している場合は、<img>タグ。

0
Lou Franco

ImageOptimをお試しください https://imageoptim.com/mac 無料でオープンソースです

0
Jerry T

Ubuntuで画像サイズを変更したい場合は、「gimp」を試すことができます。私はubuntuでいくつかの画像編集アプリを試しましたが、これはそれらの中で最高のようです。

インストールする方法?

-オープンターミナル

-type:sudo apt-get install gimp-plugin-registry

-管理者パスワードを与えます。これにはネット接続が必要です。

-一度インストールしたら、GIMP画像エディターで画像を開きます。次に、[ファイル]> [名前を付けてエクスポート]> [エクスポート]ボタンをクリックします。

-小さなウィンドウが表示され、[画像ウィンドウにプレビューを表示する]チェックボックスがオンになります。このオプションをチェックすると、ファイルの現在のサイズと品質レベルが表示されます。

-品質レベルを調整して、ファイルサイズを増減します。

-調整が完了したら、最後に「エクスポート」ボタンをクリックしてファイルを保存します。

0
InuYasha

optipngを使用して、サイズを損失なしに縮小します

http://optipng.sourceforge.net/

0
JulienGenoud

画像の種類によって異なりますが、実際の画像またはコンピューターで生成された画像の場合、実際の画像の場合、pngはほとんど圧縮せず、圧縮しない場合もあります。これらの画像にはjpgを使用します。さまざまな色(24ビットの画像深度を持つことができますが、一意の画像の数は少なくなります)pngは非常にうまく圧縮できます。 pngは基本的に画像用のZipの実装であるため、多くのピクセルが同じ場合はかなりの圧縮率を使用できます。可逆圧縮が必要な場合はサイズ変更を行わないでください。

0
just a guest