ImageMagick の例 --
一般的な画像形式

目次
ImageMagick の例 序文と目次
一般的な画像ファイル形式の簡単な概要
GIF 画像ファイル形式
JPEG 画像ファイル形式
PNG 画像ファイル形式
画像プロファイル
ベクター画像形式に関する一言
その他の画像ファイル形式
Postscript (PS),  Encapsulated PS (EPS),  PDF,
PbmPlus/NetPBM (PBM, PGM, PPM, PNM, PAM),
TIFF,   BMP,   ICO,   RAW デジタル画像 (CRW,CR2 など),
MPEG, M2V および AVI,   MNG,   Digital Picture Exchange (DPX),
PSD,   WMF,   MacroMedia Flash (SWF),
Web ページ HTML 変換,   PCL 印刷形式,
Kodak PhotoCD 形式 (PCD),   Raw RGB データ,
多くの画像ファイル形式には、その形式を使用する際に留意する必要がある特殊な性質があります。このページでは、これらの特別なニーズと、これらの形式での結果を改善する方法について説明します。

一般的な画像ファイル形式の簡単な概要

画像形式の読み込みと書き込みの概要については、画像ファイル形式を参照してください。ImageMagick のすべてのファイル形式のリストは、IM 画像形式ページに記載されています。ここでは、最も一般的な「標準的な」画像ファイル形式と、その一般的な長所と短所の簡単な概要を示します...
GIF
この形式は非常に一般的であり、非常に長い間存在しているため、すべての画像処理プログラムが理解できます。ただし、使用できる色は限られており (256 色のカラーテーブル)、8 ビット品質でのみ保存します。ただし、組み込みのランレングスエンコーディングにより、色が少ない画像を非常に効率的に保存できます。この形式には透明度がありますが、ブール値 (オン/オフ) の透明度しか理解できないため、結果として「エイリアシング」または「ジャギー」が発生します。細い線を持つプレーンテキストは、透明な GIF 画像として保存するとひどく影響を受けます。この問題の唯一の解決策は、GIF 画像を、使用するウェブページの特定の背景に結び付けることです。GIF 形式では、アニメーションシーケンスを形成するために複数の画像を保存でき、この目的のために画像のキャンバスサイズとオフセット (ページ) 情報も保存します。ただし、負のオフセットはサポートされておらず、負のオフセットを試みるとそのオフセットがゼロにリセットされることに注意してください。この形式は、色が限られており、うまく圧縮できる、漫画、線画、小さなアイコンなどの小さな画像に最適です。ただし、PNG のような新しい形式が利用可能な場合は、この形式の使用は避けるべきです。
JPEG
透明度をまったく処理しません。この画像は、アルファチャネルを削除するために "-alpha off" 操作を使用するのと同等であるため、一般的な背景の透明度は、画像を生成するために使用される画像処理に応じて黒になります。この形式は「非可逆」でもあり、シャープな線や境界にエッジ効果が生じるため、中間画像処理や、画像のオリジナルを保存するために使用しないでください (すでにこの形式である場合を除く)。実写の写真を長期保存するには適していますが、画像をさらに処理する予定がある場合、または画像に単色の広い領域が含まれている場合は避けてください。
PNG
この形式は、GIF や TIFF などの古い形式を最終的に置き換えることを目的としています。これは、半透明色を完全に使用できる 4 つのカラーチャネルを備えた 16 ビット品質を処理できる最新の形式です。また、多数の可逆画像圧縮オプションが含まれています。最大の欠点は、まだ比較的新しい形式であるため、Microsoft IE (v6) Web ブラウザが自動的に正しく処理しないことです。ただし、この問題には修正があります。この形式はキャンバスサイズの情報を保存しません (GIF は保存します) が、キャンバスのオフセットや負のオフセットも保存します (GIF は保存しません)。ただし、一部の Web ブラウザでは負のオフセットを使用すると問題が発生するため、ブラウザに表示する最終的な画像には推奨されません。中間的な「レイヤー化された」画像を保存する場合、負のオフセットを保存できることは非常に重要になる可能性があり、キャンバスサイズの情報を保存しないことよりもはるかに重要になることがよくあります。
MNG
これは PNG の複数画像形式であり、アニメーションを映画品質レベルと速度で作成できます。MNG の使用に関する簡単な例が必要なので、例をお持ちの場合はメールしてください。MNG アニメーション形式は廃止されつつあるようで、FireFox などの一部の Web ブラウザでは放棄されています。
TIFF
これは、本格的な画像形式が登場する前に、プログラム間で高品質の画像を転送するために開発された画像交換形式です。残念ながら、この始まりのために、この形式は、さまざまな機能と圧縮スタイルで無秩序に変更されており、すべてのプログラムがそれらをすべて理解しているわけではありません。この形式は現在、Windows プラットフォームの "Photoshop" でのみ使用されており、これが TIFF 画像形式の標準的な参照を提供している唯一のソースです。TIFF ファイルは複数の画像を処理できますが、IM 以外のアプリケーションは複数の画像を含む TIFF をほとんど処理しません。一般的に、TIFF 画像の内部形式が比較的基本的なものでない限り、あるプログラムで生成された TIFF ファイルが、IM を含む別のプログラム、または "Photoshop" 自体でも使用可能であるという保証はありません。そのため、この形式は一切推奨しません! TIFF (または JPEG) 以外の他の形式を使用することをお勧めします。特に画像を長期保存する場合はそうです。この形式とその問題に関するいくつかの注意事項は、以下のその他の形式、TIFF セクションで提供しています。これらの使用上の注意は、IM メーリングリストとフォーラムで見つかったもので、私自身は TIFF を使用または使用する必要がないためです。
ビデオ形式
その他の映画品質のアニメーション形式は、通常、非可逆圧縮を使用して、映画のサイズ (および品質) を削減することを基本としています。どちらの形式も常に変化しており、機能が改善されたり、セキュリティが強化されたりするため、どのような形式の処理も困難になっています。最近では、何らかの目的で一般的に使用されている 200 を超えるビデオ形式の「コーデック」が存在します。このため、IM はこの形式を直接処理せず、代わりに他のソフトウェアパッケージを使用して、個々のフレームをアニメーションに出し入れする処理を処理します。これらの「デリゲート」プログラムには、"mpeg2decode"、"mpeg2encode"、および "mplayer" が含まれます。(以下のMPEG、M2V、および AVIを参照してください)。
一部のシステム (ubuntu など) では、セキュリティポリシーを使用して特定の画像ファイル形式の使用を無効にしています。magick -list policy と入力して、システムに存在するポリシーとその設定場所を確認してください。

GIF 画像ファイル形式

GIF 形式は、非常に非常に非常に長い間 (1980 年代後半から) 存在しているため、非常に広く知られている画像ファイル形式です。これは、透明度や画像アニメーションを含む Web ページに表示される画像によく選択されます。また、すべての Web ブラウザで絶対に普遍的に理解される唯一の形式でもあります。残念ながら、線画、図、グラフ、漫画以外の用途にはあまり適した形式ではありません。つまり、最大 256 色に制限されており、そのうち 1 つは通常、透明としてフラグが立てられます。画像内の特定の 1 色を透明としてフラグを立てることには、いくつかの欠点があります。透明として使用する色を不適切に選択すると、意図していなかった場合でも画像の他の部分が透明になる可能性があります。そうならないように注意する必要があります。さらに、透明度の機能は「ブール値」であり、基本的には完全にオンか完全にオフのどちらかであることを意味します。半透明の色はまったく不可能であり、存在する場合は透明にするか不透明にするかのどちらかを選択する必要があります。つまり、この形式では画像の端のアンチエイリアシングをまったく提供できず、通常、「ジャギー」がひどい状態になります。(アンチエイリアシングを参照) 「GIF」画像形式の色制限は、特に ImageMagick のような高品質の画像処理パッケージで非常に多くの問題を引き起こすため、最初に言っておきたいのですが...
可能な限り GIF 形式は避けてください。
どうしても使用する必要がある場合は、最後のステップでのみ使用してください。
長らくの間、GIFで使用される圧縮アルゴリズムは特許で保護されていました。その結果、ImageMagickのような多くの画像処理プログラムで利用することができませんでした。そのため、非常に古いIMプログラムはGIF形式の画像を非圧縮で出力し、必要以上にディスクスペースを消費していました。これを修正するには、「Gifsicle」や「InterGIF」のようなGIFバッチ圧縮プログラムを使用できます。しかし、2004年半ばに特許が完全に失効したため、現在のIMリリースではGIF画像圧縮が再び有効になりました。画像圧縮は比較的単純で、均一な色の広い領域を持つ画像や、組織的ディザ(IMのデフォルトディザではありません)を使用した場合のような、同じ色のセットの単純な繰り返しパターンで最も効果を発揮します。最後に、GIF画像は1つのファイルに複数の画像を保存できます。これは、初期の「Netscape」ブラウザによって導入されて以来、ほぼすべてのWebブラウザで認識されているGIFアニメーションを生成するために使用されます。要約すると、GIF画像ファイル形式は、限られたカラーテーブル、ブーリアン透明度、および(有効な場合の)単純な圧縮により、サムネイルなどの小さな画像、特に均一な色の広い領域を持つ「漫画風」のアイコン、ロゴ、シンボル画像に最適です。そのアニメーション機能も、ワールドワイドウェブ全体で見られる派手な人目を引くロゴや広告を生成するのに理想的な方法です。それ以外の用途では、その制限により画像ファイル形式としては不十分であり、JPEG、PNG、またはビデオ画像形式に移行する方が良いかもしれません。

GIF の限定カラーテーブル

FUTURE: color reduction examples -- reference basic color dithering
Ensuring that a specific color is present in the final GIF image
Map color tables to color reduce.
See Color Quantization.
複数の色範囲で複数の画像を生成する例については、高度な3D弾丸スクリプトを参照してください。この手法は、さまざまな背景色やパターンに合わせて画像を複数の画像に自動的に変換するためにも使用できます。

GIF の透明色

たとえば、ここではidentifyを使用して、特定のGIF画像ファイルが透明度を表すために使用した透明色とカラーテーブルを抽出します。perlスクリプトは、対象の特定のフィールド(複数行になる可能性があります)のみを抽出します。

  magick identify -verbose hand_point.gif |\
      perl -0777 -ne 's/^  //gm; \
            print $& while /^(Colors|Alpha|Colormap):.*?(?=^\S)/gms'
[IM Output]
[IM Output]
ご覧のとおり、この画像には透明なグレーの色('#CCCCCC00')が使用されており、この色にはカラーテーブルに独自のエントリがあります。また、この画像は5色(透明色1色を含む)しか使用していませんが、使用されているカラーテーブルは8色用であることもわかります。これは、GIFファイル形式では、サイズが2の累乗であるカラーテーブルしか使用できないためです。つまり、カラーテーブルは常に2、4、8、16、32、64、128、または256色のサイズのエントリになります。そのため、最後の3つのカラーテーブルエントリは使用されていません。実際には、それらは参照されていないだけです。場合によっては、これらの未使用のエントリはカラーテーブルの最後の3つのエントリではない場合があり、実際には任意の色値が含まれている可能性があります。また、重複する色値を持つこともできますが、IMは通常、画像を何らかの方法で処理すると、そのような重複する色エントリを削除します。IMバージョン6.2.9-2(および一部の古いバージョン)では、IMはGIF画像を読み取り、処理、書き込みするたびにカラーテーブル、特に透明な色の値を保持します。

  magick hand_point.gif    -fill white -opaque wheat   hand_white.gif
  magick identify -verbose hand_white.gif |\
      perl -0777 -ne 's/^  //gm; \
            print $& while /^(Colors|Alpha|Colormap):.*?(?=^\S)/gms'
[IM Output]
[IM Output]
ご覧のとおり、画像が変更された(すべての 'wheat' 色のピクセルが 'white' 色に置き換えられた)にもかかわらず、使用された透明色は保持されました。ただし、最終的な画像に透明度がない場合、カラーテーブルの透明色エントリ('Alpha:')は完全に削除されます。

  magick hand_point.gif   -background white -flatten    hand_flatten.gif
  magick identify -verbose hand_flatten.gif |\
      perl -0777 -ne 's/^  //gm; \
            print $& while /^(Colors|Alpha|Colormap):.*?(?=^\S)/gms'
[IM Output]
[IM Output]
GIFファイル形式が使用している透明色を変更したい場合は、"-transparent-color"出力設定(IM v6.2.9-2で追加)を使用できます。例:

  magick hand_point.gif -transparent-color wheat  hand_wheat.gif
  magick identify -verbose hand_wheat.gif |\
      perl -0777 -ne 's/^  //gm; \
            print $& while /^(Colors|Alpha|Colormap):.*?(?=^\S)/gms'
[IM Output]
[IM Output]
ご覧のとおり、結果は元のものと見た目は変わりませんが、透明色は 'wheat' 色の完全な透明バージョンに変更されました。よく見ると、画像に 'wheat' または '#F5DEB3' 色が2つあることもわかります。つまり、1つは透明な小麦色、もう1つは不透明な小麦色です。IMバージョン6.2.9-2の時点では、これは問題ありません。ただし、GIF画像ファイル形式で定義できる透明色は1つだけです。なぜそうするのでしょうか?一部の非常に古いWebブラウザやグラフィックプログラムは、GIFの透明度を理解していないからです。このオプションを使用すると、そのような状況で透明領域をどのような色にするかを設定できます。透明色の一般的な選択肢は、最新のブラウザでは 'white'、またはより一般的には、元の「mosaic」Webブラウザのページの色であった'grey75'('#BFBFBF')です。その他の一般的な透明色の選択肢は、'grey'('#BEBEBE')と 'silver'('#C0C0C0')であり、上記の手の画像で使用されていたものです。これは、グレースケール色の範囲の特定領域が透明色としてどれほど人気があるかを示しています。将来:色の選択へのリンクを追加します。
IM v6.2.9-2以前、および"-transparent-color"出力設定の作成以前は、IMは通常、画像の透明度を特殊な色'none'(完全に透明な黒)として保存していましたが、これは透明度が失敗した場合に特に良いとは言えません。
"-transparent-color"を設定しても、GIF画像に透明度が追加されるわけではありませんし、指定した色が透明になるように魔法をかけるわけでもないことに注意してください。このオプションが行うのは、GIF画像で透明色を表すために使用される色インデックスのカラーテーブルにどの色を配置するかを指定することだけです。特定の(正確な)色を透明にしたい場合は、"-transparent" カラー置換演算子を使用してください。

GIF のブール透明度

GIF形式は半透明色を理解しておらず、ImageMagickはデフォルトで通常のアンチエイリアシングメソッドの一部として半透明色を生成するため、この形式で画像を保存すると、ひどい見た目になることがよくあります。たとえば、ここでは、透明な背景に単純な黒い円を描画します。また、何が起こっているかを明確にするために、画像の端の拡大図を生成します。最初にPNG形式で出力します...

  magick -size 60x60 xc:none -fill white -stroke black \
          -draw 'circle 30,30 5,20' circle.png
  magick circle.png -crop 10x10+40+3 +repage  -scale 600%  circle_mag.png
[IM Output] [IM Output]
ご覧のとおり、左側の円の端は(PNG形式で)画像の非常にきれいな(ただし少しぼやけた)端として描画されています。拡大図では、半透明のピクセルが見えます。次に、同じ画像を「GIF」画像形式で出力してみましょう...

  magick -size 60x60 xc:none -fill white -stroke black \
          -draw 'circle 30,30 5,20' circle.gif
  magick circle.gif -crop 10x10+40+3 +repage  -scale 600%  circle_mag.gif
[IM Output] [IM Output]
結果として、円の外側の端に非常に鋭い階段状の視覚効果があり、内側は適切にアンチエイリアスされたままです。基本的に、PNG形式は半透明のピクセル情報を保存できますが、GIFは保存できません。GIF画像形式は、単一の純粋な透明色しか保存できません。言い換えれば...
GIF形式にはオン/オフまたはブーリアン透明度があります
結果のGIFをより詳しく見ると、半透明のピクセルが完全に透明または完全に不透明になった可能性があることがわかります。
ImageMagickが半透明ピクセルに対して実際に行うことは、使用しているIMのバージョンによって異なります。長い間、適切に定義されておらず、バージョンが行ったことは、ユーザーからのバグレポートによって適用された最後の「バグ修正」に依存することがよくありました。

v6.2.9-6の時点で、ImageMagickはデフォルトで、GIFおよびXPM画像形式の両方について画像を50%レベルで閾値処理する必要があります。これは、画像ハンドラーで使用される受け入れられた標準になりましたが、GIFファイル形式の透明度の問題を処理するための独自の方法を設定することもできます。
GIFの制限のため、IMはGIFファイル形式に保存する前に、次の操作セットを実行します...
    -channel A -threshold 50%
    if (fully-)transparent pixels are present it then...
      -quantize transparent -colors 255
    otherwise if no transparent pixels present...
      -colors 256
-colors量子化プロセスは、画像にその数より少ない色が存在する場合、自動的に何も行いません。また、画像に("+/-map"によって割り当てられた)有効なカラーマップがある場合も何も行いません。

また、マルチ画像GIFファイルに共通のカラーマップを使用しようとしません。そのため、色がフレームごとに大きく異なる場合、GIFファイル形式に保存される各画像にローカルカラーテーブルが追加される可能性があります。

また、上記で使用した設定は、保存される画像に対してのみ一時的なものです。つまり、"-write image.gif"を使用した場合、プロセス中に使用された設定は、後続の操作には影響しません。
自分で閾値処理を行うこともできますが、(特に古いバージョンの)IMのどのバージョンを使用しているかわからない場合は、この方法をお勧めします。

  magick -size 60x60 xc:none -fill white -stroke black \
          -draw 'circle 30,30 5,20' \
          -channel A -threshold 50%  circle_threshold.gif
  magick circle_threshold.gif -crop 10x10+40+3 +repage \
          -scale 600%   circle_threshold_mag.gif
[IM Output] [IM Output]
上記の例では、IMが現在自動的に行っているのと同じ"-threshold 50%"をアルファチャネルで実行します。つまり、ピクセルが50%以上透明な場合、完全に透明になります(定義されている場合は、"-transparent-color"設定で指定された色を使用)。ただし、必要に応じて閾値レベルを制御できるようになりました。アルファチャネルを50%で閾値処理すると、ほとんどのタイプの画像でうまく機能します。特に単純なエッジを持つ画像ですが、半透明ピクセルの広い領域を処理する必要がある場合、この手法はかなりうまく機能しません。これは、GIF処理に関する以下のほとんどの例が対象とするものです。たとえば、この画像(PNG形式)のように、大きなぼやけた半透明の影を含む画像を保存するとします...

  magick -size 70x60 xc:none -font Candice -pointsize 50 \
          -fill black -annotate +10+45 'A' -channel RGBA  -blur 0x5 \
          -fill white -stroke black -draw "text 5,40 'A'"   a.png
[IM Output]
この文字を直接GIF形式で保存した場合、または"-threshold"操作を使用してブーリアン透明度を制御した場合でも、非常にがっかりするでしょう。

  magick a.png  a.gif
  magick a.png -channel A -threshold 75%   a_threshold.gif
[IM Output] [IM Output]
最初の画像はGIF形式への通常の保存で、ご覧のとおり、半透明のピクセルが'50%'で閾値処理されています。2番目の画像は'75%'で閾値処理されており、より多くの半透明ピクセルが完全に不透明(または可視)になるように許可されています。半透明ピクセル(たとえば影)をすべて削除したいだけの場合は、"-threshold 15%"のようなものを試して、ほぼすべての半透明ピクセルを削除できます。

  magick a.png -channel A -threshold 15%   a_no_shadow.gif
[IM Output]
GIFブーリアン透明度の問題に対する他のほとんどの解決策は、画像を表示するWebページの背景色に画像を不可分に関連付けることです。これを行う方法は複雑でトリッキーであり、これについてはこれから見ていきます。

単色の背景でのGIF

半透明でアンチエイリアスされたピクセルの陰影を何らかの方法で保持し、それでもWWWでうまく表示できるようにしたいと考えています。これを行うには、少しトリッキーである必要があります。一般的な解決策は、画像をGIF形式で保存する前に、表示する背景に画像をオーバーレイすることです。これにより、あらゆる形式の透明度の必要がなくなり、すべてが問題ではなくなります。もちろん、色の数が限られていることは依然として問題ですが、それほど大きな問題ではないことがよくあります。

  magick a.png -background LightSteelBlue -flatten  a_overlay.gif
[IM Output]
完璧に見えますね!もちろん、この方法が正しく機能するためには、画像が使用される背景色が正確に何であるかを知る必要があります。また、完了後、画像は他の背景ではあまり役に立たなくなります。大きな犠牲を払うことになります。

背景パターン上のGIF

しかし、背景に単純な単色ではなく、何らかのパターンを使用している場合はどうでしょうか?結果の画像のパターンがWebページのパターンと一致するように、背景パターンのコピーの上にオーバーレイを配置してみることができます。しかし、画像の背景をWebページと一致させるには、多くの試行錯誤が必要になります。また、特定のブラウザーでのみ、そしてそのブラウザーの特定のバージョンでのみ動作することを保証できます。Webページには適していないため、試してみる必要はありません。私は絶対に試しません。背景パターンとの完全な一致を試みる代わりに、少なくとも使用する予定の背景と一致する色の上にオーバーレイしてみましょう。たとえば、画像を「典型的な」泡のような背景パターンにオーバーレイしてみましょう。ただし、まず、この背景の平均色を知る必要があります。この色を見つける簡単な方法は、画像を単一のピクセルに縮小し、結果の色を読み取ることです。

  magick bg.gif -scale 1x1\! -depth 8 txt:-
   [IM Text]
使用される特別な「txt:」出力形式の詳細については、IMピクセル列挙テキスト形式を参照してください。次に、「-flatten」を使用して、画像の背景の透明度を設定します。

  magick a.png  -background '#BABBD7' -flatten  a_bg.gif
[IM Output]
Webページを設定して、画像自体には含まれていないにもかかわらず、その背景に画像をオーバーレイしました。背景に使用されている色は背景パターンの一般的な色と一致していましたが、それでも周囲に背景パターンがない単色の非常に明らかな長方形があります。実用的な解決策の1つは、オーバーレイする色をGIF出力の「-transparent」カラーとして宣言することです。これを行うことで、画像の「正方形さ」を取り除きます。また、ファズファクターを少し追加すると、上記でしきい値が実行したのと同じ方法で、透明な色が使用するスペースの量が改善および調整されます。

  magick a.png  -background '#B9BBD6' -flatten \
          -fuzz 5%   -transparent '#B9BBD6'   a_bg_trans.gif
[IM Output]
これは通常、ほとんどのGIF画像の透明度を処理するのに十分ですが、画像を特定の背景色に結び付けます。本質的に、透明度を真の透明度ではなく、画像の基本的なアウトライン形状を設定するために使用しています。オーバーレイとGIFの透明度に背景パターンと一致する色を使用することで、画像のどこで停止し、背景パターンがどこで開始するかが正確にはっきりしなくなります。
ただし、「-fuzz」の設定には注意してください。多すぎると、画像の外部だけでなく、透明になってしまう可能性があります!

  magick a.png  -background '#B9BBD6' -flatten \
          -fuzz 25%  -transparent '#B9BBD6'   a_bg_overfuzz.gif
[IM Output]
また、画像自体の中に背景色に近い色を使用した場合も失敗します。したがって、この手法は一般的な画像には推奨されません。特定のケースでのみ推奨されます。この問題を解決するために、「-alpha floodfill」を使用して、透明にしたい領域を設定します。

  magick a.png  -background '#B9BBD6' -flatten \
          -fuzz 25%  -draw 'fill none alpha 0,0 floodfill' a_bg_none.gif
 
[IM Output]
画像の境界が「漏れない」限り、画像内部に背景と同じような色を使用しても、それらが「過度のファズ」によって透明になることはありません。もちろん、画像に「穴」がある場合は、それらの穴も処理する必要があります。その場合、前の「ファズ付き透明度」の方がうまくいくかもしれません。GIFの透明色の処理は簡単だと言いましたか?そうではありません!
特にシャープなアンチエイリアスエッジを持つ画像の代替手法は、背景色の最小限のアウトラインを追加することです。アウトラインまたはハロー透明度を参照してください。
背景色の削除...既存のGIF画像から特定の背景色を削除しようとするのは簡単ではありません。オーバーレイされた画像にも背景色が含まれている場合は、特に困難です。背景とそうでないものが何であるかが実際にはわからないためです。最良の解決策は、2つの異なる既知の背景色で同じGIFオーバーレイのコピーを取得することです。そのような2つの画像を使用すると、元のオーバーレイとその半透明ピクセルを完全に復元できます。2つの背景を使用した背景の削除を参照してください。そのような2つの画像がない場合は、画像の半透明度を完全に復元することはできませんが、不完全ながらも妥当な処理ができる技術はあります。これについては、背景の削除の他のセクションを参照してください。

非特定の背景のGIF(または透明度のディザリング)

FUTURE: This will move into a more generalise (non-GIF specific), alpha
dithering section.
上記の問題点は、画像が使用される背景、または背景パターンが正確にどのような色であるかを知っている場合にのみ機能することです。知らない場合は、すべてが失われるわけではありません。上記で見たように、しきい値は、ぼやけた影など、非常に広い透明度を持つ画像にはうまく機能しません。しかし、ディザリングと呼ばれる別の手法は、使用される背景を知る必要がありません。基本的にディザリングは透明度をオン/オフの値に制限し、ピクセルのパターンを使用して広い領域にわたって半透明の効果を作成します。言い換えれば、半透明を偽造します。この方法は、現在「オポッサムの例」として知られているもので実証されました。残念ながら、これらの例では、例の生成に使用されたコマンドは実際には示されていませんでした。完全を期すために、ここで再度デモを試みます。「-monochrome」演算子は、画像内のすべての色を純粋な黒と白の「フロイド-スタインバーグ誤差拡散ディザ」に変換します。ただし、グレースケール画像を純粋な黒と白の色のみに変換するため、画像からアルファチャンネルマスクを抽出し、ディザリングして画像に戻す必要があります。

  magick a.png \( +clone -fx a -alpha off -monochrome \) \
          -compose CopyOpacity -composite   a_dither.gif
[IM Output]
同様に、「-channel」設定を使用して、アルファチャンネルのみに制限できる、他のいくつかのディザリング演算子があります(「-monochrome」とは異なります)。

  magick a.png -channel A -ordered-dither   o2x2   a_ordered_2x2.gif
  magick a.png -channel A -ordered-dither   o3x3   a_ordered_3x3.gif
  magick a.png -channel A -ordered-dither   o4x4   a_ordered_4x4.gif

  magick a.png -channel A -ordered-dither  checks  a_halftone_2.gif
  magick a.png -channel A -ordered-dither  h4x4a   a_halftone_4.gif
  magick a.png -channel A -ordered-dither  h6x6a   a_halftone_6.gif
  magick a.png -channel A -ordered-dither  h8x8a   a_halftone_8.gif


magick a.png -channel A -random-threshold 5x95% a_random_5x95.gif
magick a.png -channel A -random-threshold 5x70% a_random_5x60.gif
magick a.png -channel A -random-threshold 50x95% a_random_50x95.gif
magick a.png -channel A -random-threshold 45x55% a_random_45x55.gif magick a.png -channel A -random-threshold 50x50% a_random_50x50.gif
[IM Output] [IM Output] [IM Output]
[IM Output] [IM Output] [IM Output] [IM Output]
[IM Output] [IM Output] [IM Output] [IM Output] [IM Output]
ご覧のとおり、「-ordered-dither」は、全体的な透明度を表すために、透明と不透明の色のパターンを生成します。ただし、これは非常に目立つ規則的なパターンを生成します。ただし、通常の背景よりも類似しているが暗い影の色を使用すると、このパターンをほとんど完全に非表示にすることができます。「checks」パターン(2行目の最初の画像)は、非常にシンプルでクリーンで整然とした3レベルのパターンであるため、特に関心があります。
-ordered-dither」は、IM v6.2.8-6で「ハーフトーン」ディザパターンで拡張されました。その後、この演算子はIM v6.3.0で名前付きディザパターンで完全に改訂されました(完全なリストを表示するには「-list threshold」を使用してください)。独自のディザリングパターンを生成して、他の特殊効果を生成することもできます。順序付けられたディザリングの例および順序付けられたディザリングのアップグレードノートを参照してください。

この再開発の前は、引数は幾何学的文字列「2x2」、「3x3」、「4x4」のみで構成されていました(これは引き続き機能します)。ただし、それ以外は「-random-threshold」引数として扱われ、通常は悲惨な結果をもたらします。非常に古いバージョンのIMでこのオプションを使用する場合は注意が必要です。
一方、「-random-threshold」は、実行されるたびに異なる高度に可変なランダム化ディザを生成します。ただし、このディザリングアルゴリズムの純粋にランダムな性質は、「フロイド-スタインバーグ」「-monochrome」演算子によって生成されるよりスムーズなアルゴリズム的に配置されたディザリングではなく、ピクセルの大きな「塊」を生成する傾向があります。ただし、「-random-threshold」の大きな利点は、提供する制限コントロールです。パラメーターを非常に制限的にする(たとえば「50x50%」のように)と、「-random-threshold」を単純な「-threshold」演算子に魔改造できます。制限を少しだけ緩くすると、しきい値制限の非常に端だけをランダム化できます(たとえば「45x55%」を使用)。
-random-threshold」引数「PxQ」の場合、Pは最小しきい値であり、Qは最大値です(「%」記号が必要です)。したがって、「5x95%」は、MaxRGBの5%未満のものはすべて0に設定され、95%を超えるものはすべてMaxRGBに設定され、それ以外の場合は、そのピクセルに使用するしきい値レベルとしてMaxRGBの5%から95%の間のランダムな値を選択します。 「5x95%」の値はおそらくほとんどの場合に使用するのに最適な値です。
影の色に黒の代わりに暗い中間色(濃い灰色など)を使用すると、最終的な見栄えを向上させることができます。これを行うことで、色が背景にぼやける傾向が強くなり、上記の表示よりもディザリングが目立たなくなります。背景色がほぼわかっている場合は、特定の背景色に限定することなく、その色合いの暗い色を使用して影をうまく曲げることができます。全体的な結果を改善するために、2つの方法を少し混ぜ合わせたようなものです。基本的には、やりたいことに取り組めば取り組むほど、結果は良くなります。
FUTURE: dither example with a dither color matching the light blue background
of this web page.

ImageMagick 以外の GIF 処理

giftrans GIF画像のすべてのアトリビュートとカラーテーブルをリスト表示します。また、画像のカラーテーブルの順序を変更したり、同じ色を持つカラーインデックスをマージしたりすることなく(推奨されない状況)、特定のカラーインデックスを透明色として設定することもできます。私が知る限り、IMの "magick identify" コマンドは、画像アニメーションで使用される「Mosaic Application Extension」の「loop repeat limit」を含む、画像属性のリスト表示においてより優れています。「gif2anim」スクリプト(下記参照)も参照してください。以前は、このプログラムを使用して、抽出された個々の「フレーム」からGIFを再作成するために必要なGIF画像メタデータを抽出していました。現在では、このメタデータを抽出するために "magick identify" のみを使用しています。
GIFsicle これは汎用的な画像最適化プログラムであり、当初の目的は、そのアルゴリズムがまだ著作権下にあった時代にGIF画像に圧縮を再び追加することでした。このプログラムは、コメントの追加、GIFアニメーションの作成、およびIMの "-deconstruct" 演算子が実行するのと同じ方法で、そのようなアニメーションを最適化するために使用できますが、LZW圧縮最適化などのさらなる透明化最適化が行われます。
InterGIF アニメーションGIFの処理用に設計されたGIFsicleと同様のプログラムです。ただし、透明度圧縮最適化のみを提供します。ただし、その他の機能も役立つ場合があります。ご意見をお聞かせください。
gif2anim GIFアニメーションファイルを受け取り、個々のフレーム画像をすべて抽出するとともに、抽出されたフレーム画像からアニメーションを再構築するために必要なすべてのIM "magick" 設定を含む ".anim" ファイルを生成するシェルスクリプトです。
anim2gif 上記のスクリプトの逆で、IM "magick" の設定をすべて含む ".anim" ファイルを受け取り、GIFアニメーション画像を再構築します。このスクリプトは、GIFアニメーションファイルの調査、編集、調整、マージに非常に役立ちます。基本的な使用方法については、アニメーションリスト情報を参照してください。また、その実際の使用例については、アニメーションの追加(時間同期)を参照してください。

GIF画像オフセット処理

GIF形式では、画像アニメーション処理の一部としてオフセット付きで画像が保存されますが、負のオフセットは保存されません。GIF画像に負のオフセットを保存しようとすると、オフセットはゼロにリセットされます。これは、GIF画像アニメーションを設計する際に非常に厄介な場合があります。Internet Explorer Webブラウザーに、画像の「ページオフセット」が「ページキャンバスサイズ」の外に画像を配置するGIF画像が与えられた場合、ページサイズとオフセットを無視し、そのようなオフセットがないかのように表示します。一方、古いMozilla Webブラウザーは、画像キャンバスを表示し、画像にオフセットを適用します。これにより、画像データがない空のキャンバスが表示される場合があります。これは正しいですが、予期しない場合があります。どちらも、画像がそのページキャンバスに完全に含まれている場合は、ページキャンバスサイズを使用して、適切なページオフセットを使用して画像を表示します。

関連するGIF出力形式

GIF87:画像を古いGIF 87a形式で出力します。

「Mozilla」Webブラウザーがこの古い形式を認識した場合、画像のページジオメトリを完全に無視し、より大きな「ページ」フレームを使用したり、画像オフセットを画像で使用したりしません。IMバージョン6.0.4以前では、通常GIF89a形式が生成されていました。ただし、画像がGIFアニメーションであり、+adjoinを使用して個別の画像に分割された場合、ImはGIF87aを使用し、Webブラウザーで表示した場合に矛盾した結果が生じていました。IM v6.0.4以降では、ユーザーが古い "GIF87:" 出力形式を明示的に要求しない限り、常にGIF 89a画像形式ファイルが生成されます。

JPEG画像ファイル形式

この形式は、上記のGIF形式とほぼ同じくらい一般的です。ただし、GIFが小さく単純な「漫画のような」画像を念頭に置いて設計されているのに対し、JPEGは、写真などのさまざまな色や色の濃淡が多い、大きな実写画像を対象に設計されています。JPEGファイル形式の重要な機能は圧縮であり、人間の目に許容できる状態を保ちながら画像サイズを縮小します。これは非常に複雑なプロセスであり、この議論の範囲を超えています。このプロセスとその効果の詳細については、Jpeg圧縮入門を参照してください。また、You Tubeビデオ JPEG DCT、離散コサイン変換 (JPEG Pt2)- Computerphile では、非常に詳細な説明がされています。残念ながら、画像を適切に圧縮するために、アルゴリズムは意図的に情報を失います。保存されるのは、メモリ内にあるものと同じ画像ではありません。画像の特定のピクセルまたは領域の色は、通常、保存された色とまったく同じ色にはなりません。これは、画像内のオブジェクトのエッジ付近で特に当てはまります。そのため、簡単な注意点として...
IMは、画像を修正するための一般的なラスター画像プロセッサです。
可逆的なJPEG修正は行いません。
可逆的な処理に興味がある場合は、非IM JPEG処理を参照してください。
この不可逆的な動作は、JPEG画像の変更により、上または左の境界への変更量が8の倍数でない場合に、さらに顕著になります。この場合、JPEG圧縮の「ブロック」または「セル」が完全に異なり、最終的な画像保存サイズが大幅に増加する可能性があります。つまり、chop、trim、shave、border、frame、extentなどの操作(切り抜きと境界操作を参照)は、画像データを8ではないピクセルオフセットでシフトさせることができます。詳細については、IMフォーラムのディスカッション画像を切り抜くと、予期せずファイルサイズが増加するを参照してください。
通常、JPEGデータのこの不可逆的な性質はあまり目立ちません。ただし、JPEG画像を複数回ロードおよび保存したり、色変化が急激な図で非常に低い品質を使用したりすると、目立つ場合があります。ただし、JPEG画像を何度もロードまたは再利用しない限り(元のソースから操作を保持して適用する)、特に処理にあまり適していない画像タイプであっても、依然として優れたファイル形式です。この不可逆的なJPEGの性質の例として、ここでは2つのグラデーションを連結した単純な画像を生成します。グラデーションはJPEGが非常によく処理する滑らかな色の変化を提供しますが、2つのグラデーション間の急激な色の変化はうまく処理されません。

  magick -size 5x10  gradient: gradient:blue-navy  +append jpg_lossy.gif
  magick jpg_lossy.gif                  jpg_lossy.jpg
[IM Output] ==> [IM Output]
最初の画像は、画像の歪みのないGIF形式バージョンの拡大図です(画像をクリックすると、拡大されていない表示を確認またはダウンロードできます)。20色しか含まれていないため、この場合、GIF形式は画像を完全に処理でき、実際に非常に小さなファイルサイズを生成できます(以下の表を参照)。一方、JPEGバージョンの画像は、JPEG圧縮がより適切に圧縮するために保存された画像に追加した、明らかな色の歪みを示しています。歪みは青色チャネルで最も大きくなります。これは、青色が人間の目で十分に解像されないため、驚くことではありません。つまり、人間の目は青色を自然に「拡散」する傾向があるため、JPEGアルゴリズムはこのことを利用します(内部的にYCbCr色空間を使用することによって)。実際、上記の拡大表示がなければ、その効果を認識するのは困難でしょう。画像の品質が画像に与える影響を見てみましょう。

  magick jpg_lossy.gif   -quality 100%  jpg_lossy_100.jpg
  magick jpg_lossy.gif   -quality  80%  jpg_lossy_80.jpg
  magick jpg_lossy.gif   -quality  50%  jpg_lossy_50.jpg
  magick jpg_lossy.gif   -quality  20%  jpg_lossy_20.jpg
  magick jpg_lossy.gif   -quality   5%  jpg_lossy_5.jpg
[IM Output] ==> [IM Output] [IM Output] [IM Output] [IM Output] [IM Output]
上記で最初の画像結果を注意深く見ると、テスト画像を「100%」または最大品質で保存した場合でも、わずかな色の歪みが残っています。非常に見えにくいですが、存在しています。一方、JPEG画像の「-quality」設定を段階的に低くすると、この色の歪みがさらに大きくなり、目立つようになります。それだけでなく、エッジの「影」のようなものが生成され、急なエッジから広がる色の変化の「波」が発生します。これは、リンギングアーティファクトとして一般的に知られている効果です。ただし、圧縮を使用する理由は、少なくとも最初は、結果の画像のサイズが非常に大幅に小さくなるためです。以下は、結果とそのサイズ(バイト単位)のファイルリストです。
[IM Text]
この場合、GIF画像は非常に小さいことに注意してください。これは、GIFでは色の「ブロック」が大きいほど非常にうまく圧縮されるためです。JPEG品質が低下するにつれて、画像のサイズも小さくなります。ユーザーが設定するか、ソース画像形式ファイルから設定される、JPEG品質が設定されていない場合のデフォルトの品質設定は約92%であり、これは非常に高品質です。ただし、「50%」よりも低い品質設定を使用すると、ファイルサイズはあまり小さくなりません。つまり、ファイルサイズの節約に関しては、より大幅に劣化する画像のみが得られます。これは、収穫逓減のプロセスです。要約すると...
JPEGは情報を失い、保存時に画像を劣化させます。
処理中の中間画像には、他の形式を使用してください。
JPEG形式は、最終画像のみに使用し、それ以上の処理には使用しないでください。
JPEGは、線画、図、または漫画のようなアイコン、テキスト、および記号など、色の変化が急激な人工画像にも適していません。色の数が少ないそのような画像は、GIFやPNG8などのパレット画像形式を使用して保存することをお勧めします。新しいJPEG画像形式であるJpeg2000が利用可能になりつつあり、これにより可逆的なJPEG圧縮が可能になります。ただし、これには「JasPer」ライブラリもインストールする必要があります。この特殊な形式を使用するには、「-compress jpeg2000」オプションを使用するか、JP2ファイル形式で保存する必要があるため、IMは適切なライブラリを呼び出します。

JPEG 透明度 - 不可

圧縮以外に、JPEGユーザーが直面するもう1つの大きな問題は、
JPEGでは透明度が保存されない
したがって、画像を背景色またはパターンに重ねてJPEGに保存することはできますが、JPEG画像に自由形式の境界線や透視穴を与えることはできません。JPEGは実写画像や画像の一部を保存するために設計されたため、透明度は形式作成時に懸念される問題ではありませんでした。その結果、設計者はファイル形式にアルファチャネルやその他の透明度情報を組み込むことを気にしませんでした。たとえば、上記で使用した透明度のあるPNGを、直接JPEGにマジックしてみましょう。

  magick a.png  a.jpg
[IM Output] ==> [IM Output]
ご覧のとおり、透明な部分はすべて黒になりました。ただし、画像ソース(特にGIF画像)によっては、透明な領域が、ランダムな色やその他の不適切な色になった可能性もあります。これが問題になる可能性がある場合は、JPEG画像ファイル形式に画像を保存する前に、IMでアルファ透明度を削除するのが最善です。

JPEGの色歪み(テスト)

上記で述べたように、JPEGで使用される圧縮アルゴリズムは不可逆的です。その画像は、ファイルスペースを削減するために、より適切に圧縮できるように変更されます。色の歪みがどの程度発生するかは、使用する品質設定によって異なります。たとえば、IM組み込みの "netscape:" 画像に含まれる色の数を見てみましょう...

  magick identify -format "Colors: %k" netscape:
[IM Text]
ご覧のとおり、この画像にはデフォルトで、大きな長方形配列に216色が含まれています。このタイプの画像は、JPEG形式で保存するのにあまり適した画像ではありません。これは、私たちの目的に適しています。そこで、この画像のJPEG画像保存で生成される色の数を見てみましょう...

  magick netscape: JPG:- |\
     magick identify -format "Colors: %k\nFile Size: %b" -
[IM Text]
つまり、デフォルトでは、保存されたJPEGファイルにはほぼ9倍の色が含まれています。ただし、結果は元の画像のように見えますが、長方形領域のエッジには近くに色が追加されています。最高品質の設定で保存しても、色歪みなしに画像を保存することはできません...

  magick netscape: -quality 100 JPG:- |\
     magick identify -format "Colors: %k\nFile Size: %b" -
[IM Text]
ご覧のとおり、非常に高品質の設定では、追加される色がほんのわずかですが、画像にはわずかな(最小限の)色歪みが残っています。圧縮をほとんど実現できないため、ファイルサイズも大きくなっていることがわかります。次に、「可逆」を試してみましょう...

  magick netscape: -quality 100 -compress Lossless JPG:- |\
     magick identify -format "Colors: %k\nFile Size: %b" -
[IM Text]
まだ色の歪みがあります!明らかに、私のJPEGライブラリは可逆的なエンコーディング用にパッチされていません。ただし、別のパッチ適用済みライブラリのみが、そのような可逆的なJPG画像を読み取ることができることに注意してください。または、JasPerライブラリと新しいJP2画像ファイル形式を使用するようにIMをコンパイルすることをお勧めします。

  magick netscape: JP2:- |\
     magick identify -format "Colors: %k\nFile Size: %b" -
[IM Text]
ご覧のとおり、Jpeg2000形式は他の非可逆圧縮方式に切り替わりましたが、デフォルトでは画像の色の歪みは発生しません。また、画像に対して非常に高度な圧縮方法も実行します。ただし、新しいJP2形式で画質を下げて使用すると、通常のJPEG画像ファイル形式と同様に、より小さな画像を生成するために、再び色の歪みが発生します。

  magick netscape: -quality 50% JP2:- |\
     magick identify -format "Colors: %k\nFile Size: %b" -
[IM Text]
JPEG2000コーダーの使用に関する詳細については、JPEG2000エンコーディングパラメータドキュメントを参照してください。

JPEG読み込み制御オプション

-define jpeg:size={幅}x{高さ}
この設定は、指定されたサイズ(幅×高さ)以上またはそれよりも大きい画像を生成するのに十分な入力(JPEG)画像ファイルのみを読み込むように、JPEG画像ライブラリにヒントを与えるものです。入力画像が巨大な場合、IMがより小さな画像を処理することになるため、画像読み込みに必要なIMのメモリ量を大幅に削減できます。これにより、操作全体の速度が劇的に向上する可能性があります。これは、必要な画像のサイズに対するヒントにすぎないことを覚えておいてください。このサイズが保証されるわけではなく、そのサイズに近いがそれより大きいものが得られるだけです。通常、このサイズと2倍のサイズの間で、画像の縦横比を維持したものが得られます。通常、サイズヒント付きでJPEG画像を読み込んだ後、画像はすぐに最終的な「正確な」サイズにリサイズされます。また、通常は「-thumbnail」を使用して、画像プロファイルを削除します。例:

    magick -define jpeg:size=64x64   jpeg_large.jpg jpeg_size_hint.jpg
    magick -define jpeg:size=128x128 jpeg_large.jpg \
                                   -thumbnail 64x64  jpeg_thumbnail.jpg
IM v6.5.6-0より前では、このコーダー設定は「-size」設定から抽出されていました。これにより、ユーザーが画像作成に「-size」を使用したが、JPEG読み込みで予期しない結果が生じるという問題が発生しました。そのため、これは特別なコーダー設定に変更されました。

古いバージョンでは、JPEG画像を読み込む前に「-size」設定を「+size」を使用してリセットする必要がある場合があり、そうしないとIMがJPEG画像を完全に読み込まない可能性があります。

この修飾子により、JPEGライブラリはピクセルの列と行全体の読み込みをスキップすることに注意してください。そのため、サンプリングリサイズ演算子と同様の効果(エイリアシングアーティファクトを含む)が生じます。このため、上記の例に示すように、この問題を回避するために、画像の最終的な「リサイズ」の少なくとも2倍を指定することをお勧めします。
サムネイルリサイズ演算子も、通常のリサイズ操作を使用する前に画像のサイズをすばやく縮小するために、非常に大規模なリサイズ操作に同じサンプリング手法を使用しますが、最終的な画像サイズの2倍ではなく5倍になります。サイズの差は、最終的な画質の差です。
+profile '*'
-strip
デジタルカメラ、スキャンソフトウェア、「Photoshop」などの他の画像処理ソフトウェアで保存されたJPEG画像には、「プログラムコメント」の大きなプロファイルが追加されていることがよくあります。これらのいずれかのオプションを使用すると、画像を読み込んだ後、画像からこれらのプロファイルが削除されます。「+profile」演算子は、画像からすべてのカラープロファイルを削除しますが、「-strip」は、画像が持つ可能性のあるすべてのプロファイルとメタデータを削除します。また、「-thumbnail」は「-resize」オプションであり、同時に「-strip」も実行することに注意してください。サムネイルの作成も参照してください。
-type TrueColorMatte
JPEGは透明度を保存しないため、読み込まれると常に完全に不透明になり、メモリに「アルファ」チャネルがありません。この設定により、オプションの後に読み込まれるすべてのJPEG画像は、メモリに画像に追加される完全に不透明な「アルファ」チャネルを持つようになります。ただし、これを行うより良い方法は、画像を読み込んだ後、「-alpha set」または「-alpha set」を使用することです。これは、他の画像形式の読み書きへの影響が少ないためです。詳細については、読み書き時の画像タイプおよびアルファ設定を参照してください。

JPEG書き込み制御オプション

デフォルトでは、JPEG画像の読み込み時に検出された「-quality」および「-sampling-factor」が、JPEG画像に書き戻すときに使用されます。ただし、これによりディスク上のファイルサイズが同じになるとは限らず、JPEG画像を読み込んで再保存するため、常に画質のさらなる損失が発生します。ただし、JPEG量子化テーブルは保存されません。
-quality {パーセント}
おそらくJPEG画像を保存する際に最も重要なオプションであり、画像をディスクに保存する際に画像がどれだけ圧縮されるかを制御します。値はサイズパーセントではなく、画質値です。値が低いほど、画像は小さくなり、失われる画像情報が増え、アーティファクトが増え、画像が劣化します。
    FUTURE: VERY low quality example of a photo
注:画質設定「100%」では、画質の損失をまったくなくして画像を保存することが保証されているわけではなく、損失を最小限に抑えるだけです。(次のオプションを参照)注:特定のファイルサイズを得るための画質を決定することはできません。試行錯誤するしかありません。「-quality」を75%にして開始し、結果のファイルサイズを確認します。大きすぎる場合は、画質を10%下げます。小さすぎる場合は、増やします。画質の上下限を設定したら、バイナリ検索を実行して、目的のファイルサイズに最も一致する画質を見つけます。合計5回または6回の試行で十分です。
-define jpeg:extent={サイズ}
IM v6.5.8-2以降では、JPEG画像の最大出力ファイルサイズを指定できます。サイズにはサフィックスを指定します。たとえば、「400kb」です。これは、JPEG画像の多くのバージョンを生成し、出力品質「-quality」設定のバイナリ検索を実行して、指定されたファイルサイズを超えないようにできるだけ近づけることで機能します。これは、画像を一時ファイルに繰り返し書き込み、適切な品質サイズになったら、最終的な画像を1回だけ指定された出力ファイル名に出力することで実行されます。したがって、最終的な画像をパイプラインに出力する場合や、実際のファイルだけでなくネットワークに直接出力する場合でも、出力は問題なく機能します。ただし、I/O要件のため、このプロセスが非常に高速になることを期待しないでください。おそらく4〜8倍遅くなります。実際にタイミング比較を行った場合は、結果を私にメールしてください。
-compress LossLess
画質設定が「100%」でも、わずかに異なる色を生成する可能性があります(それでも「可逆」です)。「-compress LossLess」オプションは、JPEGライブラリに、データを損失することなく画像を保存するように要求します。そのため、画像を再読み込みすると、保存された状態とまったく同じように復元されるはずです。警告:これは、JPEGライブラリが「ロスレスJPEG」エンコーディング用にパッチされている場合にのみ機能しますが、JP2ファイル形式の使用に置き換えられたため、このオプションは実際にはほとんど効果がありません。また、これを機能させるには、「-quality 100%」も設定する必要があります。直感的には、「LossLess」で保存するということは、自動的に100%の品質を使用することを意味すると考えるかもしれませんが、そうではありません。これは、JPEG画像書き込みに対する異例のパッチの追加の結果であり、定義上可逆形式です。もちろん、生成されるファイルは、おそらく通常のJPEG画像よりもはるかに大きくなります。また、「パッチ」されたJPEGライブラリでしか読み取ることができないロスレス圧縮されたJPEGを使用することになります。そのため、「ロスレスJPEG」は推奨されていません。代わりに、(PNGやJP2などの)他の形式を使用する必要があります。
-interlace Line
読み込み中に大きなJPEG画像を見ることができるようにする「プログレッシブJPEG」スタイルを使用します。また、以下に、損失をさらに増やすことなく既存のJPEGを再エンコードするための非IMソリューションも参照してください。
-sampling-factor {水平}x{垂直}
クロマダウンサンプリングに使用されるJPEGライブラリのサンプリングファクタを調整します。これは、MPEG-2アニメーションファイルを作成するために「2x1」に設定できます。「2x2、1x1、1x1」はIMの標準的なサブサンプリング方式であり、4:2:0に対応します。Wikipedia、クロマサブサンプリングを参照してください。ただし、「品質」が90以上の場合は、チャネルはサブサンプリングされません。基本的に、処理の「ブロック」または「セル」サイズが8ピクセルか16ピクセルかを定義します。
-density {Xdpi}x{Ydpi}
密度は、結果の画像の出力ピクセルサイズには影響しませんが、上記の設定はJPEG画像ファイル形式のJFIFヘッダーに格納されます。残念ながら、Photoshopのような一部のプログラムでは、画像に保存されている特別なPhotoshop固有のプロファイル(「8BIM」)にも密度が存在する場合、この設定を無視します。密度は、プリンターやモニターなどの出力デバイスが使用されている場合にのみ重要であり、これらのデバイスが現実世界のサイズに合わせて画像を拡大縮小して表示できるようにします。たとえば、スキャンした写真やページが適切なサイズで印刷されるようにします。密度に関する詳細については、画像密度メタデータリサンプルリサイズを参照してください。
-type TrueColor
IMは、グレースケール値のみを含む画像にグレースケール内部形式を自動的に使用します。この設定は、この動作をオーバーライドし、グレースケールではなく、常にカラーJPEG画像を生成するようにIMに強制します。詳細については、読み書き時の画像タイプを参照してください。
-define jpeg:optimize-coding=false
この画像の最適なハフマン符号化テーブルの計算をオフにします。これはデフォルトでオンになっています。これには、必要な計算を行うために、画像を追加で1回パスする必要がありますが、これは最小限です。
-define jpeg:q-table={パス}
XML形式で、カスタムJPEG量子化テーブルを含むファイルを定義します。通常、サンプルテーブルは「/etc/ImageMagick/quantization-table.xml」にインストールされますが、ImageMagickに組み込まれているため、通常は使用されません。テーブルの生成に関する議論は、デジタル画像処理フォーラムで多数見つけることができ、具体的な議論(執筆時点)は、JPEG量子化テーブルより良いJPEG量子化テーブル?愚かなペットのトリック、1のqテーブルJPEGルマ量子化テーブルで見られます。このオプションはIM v6.5.7-8で追加されました。

JPEG品質とファイルサイズ

特定の品質に対するJPEGファイルの最終的なファイルサイズは不定です。圧縮のプロセス全体が非常に複雑で、わずかな変更で圧縮に大きく異なる影響が生じます。これは「バタフライ効果」です。同じソース画像で同じ品質でも、IM、JPEGライブラリ、その他の画像処理プログラムのバージョンが異なると、ファイルサイズや視覚的な品質に大きな差が生じます。品質設定は、特定の画像に適用する圧縮または視覚品質の量に関する単なる「推測」として扱うことができます。本質的に、特定の画像と品質設定に対する最終的なファイルサイズを事前に決定することは事実上不可能です。実際に実行する場合を除いて。ただし、IMは、特別な「jpeg:extent」定義を使用することにより、特定のファイルサイズに使用する最適な品質を見つけるための「テスト実行」を行うことができます。上記のJPEG書き込み制御を参照してください。非常に遅いですが、同様のDIYソリューションよりも高速です。これを行うことは推奨されません。遅いだけではありません。固定ファイルサイズ方式では、単純な画像が品質90%で出力される場合でも、50KBの不要なデータが含まれている可能性があります。一方、複雑な画像は品質30%に低下し、詳細データが不足しているためJPEGアーティファクト(または、より技術的に言えば、ひどく見える)を表示することになります。より良いアイデアは、妥当な数の画像の選択に対して平均100KBのファイルサイズを生成する単一の品質設定を見つけることです。それでも、詳細が少ない画像は50KBで出力される場合があります。一方、複雑な詳細が多い画像は150KBで出力される場合がありますが、どちらも許容範囲内です。JPEG圧縮と品質に関する実用的なガイドについては、JPEG圧縮設定の最適化を参照してください。また、JPEGの内部詳細については、JPEG圧縮、品質、およびファイルサイズを参照してください。Photoshopのヒント:Photoshopは、プレビューとカラー管理情報(プロファイル「8BIM」)を保持するために、JPEG画像に約4KBの追加情報を追加します。その情報が必要ない場合は、「Web用に保存」機能を使用してください。このヒントは、Gernot Hoffmann氏によるJPEG圧縮に関する論文に記載されていました。

関連するJPEG出力形式

PJEG:プログレッシブロードJPEG画像を書き込みます。
最近の高速ネットワークダウンロードではあまり使用されなくなりましたが、ダイヤルアップモデムが一般的だった時代には非常に一般的でした。基本的に、最初にN行ごとを書き込み、次にそれらの間の行を書き込みます。したがって、画像全体のごく一部をダウンロードしただけでも画像を見ることができます。
JPEG2000:新機能が追加された最新のJPEG形式。
この形式では、'JasPer jp2'ライブラリがインストールされている必要があります。インストールされていない場合はエラーが発生します。
この画像形式のエンコードデリゲートがありません
この形式では、標準のJPEG DCTメソッドの代わりにウェーブレット圧縮を使用して画像を圧縮します。これにより、同じ画質で大幅に優れた圧縮率が得られます。したがって、ディスクスペースをさらに削減できます。残念ながら、まだ広く採用されていないため、少なくともWebブラウザーやその他の画像ビューアーおよびエディターがこの形式を使用し始めるまでは、外部目的で使用することはできません。この形式で保存された画像は、このライブラリを使用しているユーザーのみが読み取り可能であり、このライブラリを使用するユーザーの割合が十分になるまでにはおそらく長い時間がかかるでしょう。特に、Microsoftが十分な人が要求しない限り、このライブラリを含めないであろうWindowsユーザーはそうです。Quicktimeのヒント:Quicktimeはjp2形式を使用しますが、「-depth 8」で出力する必要があります。

ImageMagick以外のJPEG処理(簡単なまとめ)

jpegtran JPEGライブラリとともにインストールされる標準ツールです。これにより、画像データをデコードおよび再エンコードすることなく、JPEG形式の画像にさまざまな変換を適用できるため、JPEGデータが劣化するのを防ぐことができます。(下記参照)
jpegtrans 以前の「jpegtran」プログラムの新しいバージョンですが、(ロスレスクロップなどの)追加された機能の多くは、配布されたライブラリバージョン(上記)に組み込まれています。
jhead 特にEXIFデジタルカメラプロファイルに関して、よりユーザーフレンドリーなロスレスJPEGハンドラーです。コメント、日付調整、サムネイルの抽出、削除または置換、プロファイルの削除などの処理も行います。また、「jpegtran」が実行する傾向がある他のプロファイルが破棄されないように試みます。「ExifTool」や「Exifer」など、同様のプログラムも多数あります。多くのJPEGからWebフォトアルバムプログラムもこれを行います。
上記のすべてが提供するJPEGロスレス回転は、サイズが8または16で割り切れる画像でのみ正しく機能します。これは、ほとんどの(すべてではありませんが)デジタルカメラの写真に当てはまります。奇数サイズの画像でこれを試すと、右または下の端のブロック(部分サイズを含む)は、これらのブロックが右または下の端にのみ存在できるため、最終的な画像で正しく配置されません。

この例については、この具体的な議論を参照してください。
ご覧のとおり、これらのプログラムのほとんどは、JPEG圧縮画像を再処理せずにJPEG画像のメタデータを処理するように設計されています。(次を参照)

可逆 JPEG 処理

JPEG画像のデコードと再エンコードにより、(ロスレス圧縮を使用しない限り)画質が劣化するため、JPEG画像ライブラリは、画質を損なうことなく画像を操作できる特殊なプログラムを多数提供しています。これらのコマンドは、画像の処理をあまり行う必要がないため、一般にIM同等品よりもはるかに高速です。JPEG画像のコメントを変更する場合は、下位レベルのJPEGライブラリプログラム「rdjpgcom」、「wrjpgcom」、および「jpegtran」を使用できます。ただし、「jhead」プログラムを使用することをお勧めします。このプログラムは、画像に存在するプロファイルやその他の情報を保持します。「jpegtran」を使用すると、さらに進んで、90度の回転、切り抜き、ドロップインなど、画像データをロスレスで操作できます。混合品質のJPEG画像の作成も可能です。このデモンストレーションについては、Nemo ThorxによるJPEGhackページを参照してください。(以下のメモを参照)ただし、これらのコマンドは、JPEG画像のブロック境界(8または16ビット)に制限されているため、一般的な使用にはお勧めできません。つまり、実際のピクセルレベルではなく、JPEG圧縮セルレベルでのみ切り抜き、回転、またはドロップインを行うことができます。コメント... JPEG写真のモンタージュサムネイルWebインデックスページを作成し、JPEGファイルに追加したコメントを使用する場合は、上記のプログラムを使用して、「-label '%c'」を使用して、モンタージュに「magick montage」コマンドラインでファイル名を読み取る前に「コメント」フィールドを使用するように指示します。また、そのコメントを複合ポラロイド変換ポラロイドモンタージュ、または何らかの種類の画像アノテーションで使用することもできます。「jhead」プログラムは、JPEG画像ファイルにコメントを追加または変更するために使用できます。ただし、「コメントの編集」(「-ce」)オプションを使用すると、コメントの最後に余分な改行が追加されるため、あまり良い方法ではありません。この余分な改行は、IMでのコマンド(「%c」ラベル書式設定エスケープ)の使用を妨げます。より良い方法は、「コメント入力」(「-ci」)を使用して(末尾に改行がない)コメントを入力するか、「コメントリテラル」(「-cl」)オプションを使用することです。

  jhead -cl 'Photo of some stuff, by Joe Citizen'  image_of_stuff.jpg
サムネイル... Brian Jackson <brian@brianjacksonphoto.com>は、ほとんどのデジタルカメラ(彼のものはCannon 1Dなど)は、生成するJPEG画像に12KB〜25KBのサイズ(160x120ピクセル)のサムネイルを埋め込んでいることも報告しています。IMは、以下の方法でこれらのサムネイルを抽出できます...

   magick image.jpg   thumbnail:thumb.jpg
ただし、「jhead」プログラムもこれらのサムネイルを抽出できます...

  mkdir thumbs
  jhead -st "thumbs/&i" *jpg
これは、画像を編集せず、既存のデータを転送するだけなので、IMと比較して非常に高速です。ただし、サムネイルの品質は、IMが実際の画像から生成できるサムネイルほど良くありません。また、正しく回転されていない可能性があり、目的のサイズには絶対になりません。ExifToolの使用... Robからの情報:JPEG画像ファイルに保存されているプロファイルの編集を、「jhead」よりも詳細に行いたい場合は、Perlベースの「ExifTool」、代替のコンパイルバージョン「ExifTool」、およびWindows GUI「Exifer」など、よりEXIF中心のアプリケーションを参照してください。Image::ExifTool Perlモジュールをインストールすると、これによりすべてのJPEGメタデータがロスレスで削除されます。将来興味を持つ人がいる場合に備えて、以下がEXIFデータを削除するコマンドラインメソッドと同等であることがわかりました。

  use Image::ExifTool;
  $exifTool = new  Image::ExifTool;
  $exifTool->SetNewValue('*');  # delete  all...
  $exifTool->WriteInfo('original_image.jpg','modified_image.jpg');
  $errorMessage = $exifTool->GetValue('Error');
  print  $errorMessage;  # (if has value an error occurred)
SetNewValueを使用して最初に設定を割り当ててから、WriteInfoを使用して同時にロードおよび保存する必要があることが判明したため、少し図解しました。JpegTransを使用した混合JPEG品質画像... Wolfgang Hugemann {Auto@Hugemann.de}は、写真の処理を妨げるため、JPEG画像の端をまったく圧縮しないことを望んでいました。 このサイトを参照してください。Yuval Levy <imagemagick07_AT_sfina.com>によって提供された解決策は、「jpegtran」を使用して低品質のJPGを高品質のJPEGに挿入することでした...
    解決策
  • ImageMagickを使用して、同じ画像の2つのバージョンを生成します。1つは高品質100、もう1つは低品質60(サイズを縮小するため)。
  • jpegtranを使用してq60を切り取り、各側で8ピクセルを削除します。
  • jpegtranを使用して、q60をq100の上にマージします。
  • jpegtranを使用して、ストライプにマージします。
Nemo Thorx <jpeghack@nemo.house.cx>は、上記を読んで混合JPEG品質を実装しようとしました。彼は成功し、JPEGhackのWikiページで結果を実証しました。基本的に、JPEGブロックの新しいセクションを既存の画像に「切り抜き」や「ドロップ」するなど、ロスレスJPEG処理を行うことは非常に可能です。

PNG画像ファイル形式

これは、アルファチャネルの透明度を含む32ビットカラーをサポートする、最も新しく最新の画像形式の1つですが、GIFのような8ビットインデックスカラースキーム(256色制限)に最適化することもできます。そのため、画像情報を失うことなく画像処理を行うための優れた中間形式になります。

PNG 圧縮

PNG 出力を使用する場合、画質は小数点以下2桁とみなされます。最初の桁(10の位)は zlib 圧縮レベルで、1 から 9 の値をとります。ただし、'0' の設定を使用すると、'zlib' 圧縮ではなくハフマン圧縮が行われます。これは、多くの場合、より優れた圧縮結果になります。奇妙ですが事実です!2番目の桁は、PNG データエンコーディングのフィルタリング(圧縮前)タイプです。0 はなし、1 は「サブ」、2 は「アップ」、3 は「平均」、4 は「Paeth」、5 は「アダプティブ」です。したがって、均一な色の連続がある画像の場合、「なし」フィルター(-quality 00)が通常は適しています。自然景観の画像の場合、「アダプティブ」フィルタリング(-quality 05)が一般的に適しています。
PNG コーダーは多くの改良が加えられており、正確なエンコーディングと圧縮設定を制御するためのより良い方法は、通常、Define オペレーターを使用して設定します。

定義の詳細については、下記のPNG 画像コントロールの書き込みを参照するか、PNG コーダーファイル "coder/png.c" のソースコードのコメントをご覧ください。

ImageMagick の画像にバイナリ(オン/オフ)の透明度がある場合、PNG エンコーダーは、完全なアルファチャンネルではなく、tRNS チャンクを使用して効率的な方法で書き込みます。ただし、0 または MaxRGB 以外の不透明度値が存在する場合、アルファチャンネルを持つ PNG を書き込みます。「-type TruecolorMatte」画像読み込み設定を使用するか、「PNG32:」フォーマットファイルを使用して画像を保存することで、この動作を強制できます。外部プログラム「pngcrush」または新しいバージョンの「OptiPNG」は、特定の PNG を可能な限り最高の圧縮で再圧縮しようとします。これは、Web サイトに配置する予定の画像に推奨されます。別のプログラム「pngnq」は、256 色の 8 ビット PNG にカラー量子化しますが、このフォーマットで半透明色がサポートされているかどうかは不明です。

より良い PNG 圧縮

PNG 画像に関する1つのポイントは、PNG 画像は完全に透明なピクセルの色を保持するということです。つまり、透明で見えなくても色があり、PNG はそのデータを保持します。これは、多くの場合、以前の画像処理から残ったゴミのような色ではなく、「見えない色」を静的な単色に置き換えることで、PNG をより圧縮できるようにすることを意味します。これには、アルファ背景オペレーターを使用して完全に透明なピクセルのみを処理する方法と、ファズ係数と透明度型の操作を使用して、半透明に近い色を完全に透明な黒にマッピングする方法の2つの主要な方法があります。たとえば、ここで上記で生成したファジーな影付きの "a.png" 画像を取得し、完全に透明な状態から20%以内のすべてのピクセルを置き換えます。

  magick a.png  -fuzz 10% -transparent none  a_compress.png
[IM Output]
[IM Output] [IM Output]
ご覧のとおり、画像サイズが大幅に改善(約50%)されています。ただし、画像の影にはシャープなカットオフがあります。別の方法としては、透明度チャンネルのレベルを調整して、影の効果を小さくすることもできます。

  magick a.png  -channel A -level 20,100%,0.85 +channel \
          -background black -alpha background a_compress2.png
[IM Output]
[IM Output] [IM Output]
また、使用する色の数を減らすことで、圧縮アルゴリズムの結果を改善し、PNG 画像の最終的なサイズを小さくすることもできます。

  magick image.jpg -thumbnail 200x90 -colors 256 \
          -quality 90 -depth 8  thumbnail.png
ただし、これは透明度を含まない小さなサムネイル画像のみに推奨され、非常に「非可逆」な手法であるため、最後のステップとしてのみ推奨されます。

PNG、ウェブブラウザ、透明度

Microsoft Internet Explorer(IE バージョン 6 以前)は、何らかの透明度が関与する場合、PNG を正しく表示しません。これは、PNG を完全にサポートしていない最もよく知られたブラウザですが、それだけではありません。PNG 透明度テスト別の PNG テストページで、ブラウザをテストできます。また、表示された結果を生成するブラウザとバージョンも一覧表示しています。ただし、IE は(少なくとも執筆時点では)おそらく最も一般的なブラウザであるため、Web ページに問題の回避策をいくつか追加できます。これに関する情報については、私の WWW ラボページ 透明度と IE を持つ PNG をご覧ください。ここでは、私が使用している「IE での PNG」ソリューションをテストし、デモンストレーションします。他の解決策としては、PNG を JPEG(正しい背景色を使用)または GIF 形式に変換することです。これらの方法は、背景上の GIF 画像で詳しく説明します。別の解決策は、PNG に保存する前に、画像内の完全に透明な色のすべてを、任意の色に設定することです。PNG はその完全に透明な色を保存しますが、他の IM 操作を行うと、完全に透明な色が完全に透明な黒にリセットされることに注意してください(透明な色は問題ないはずであり、それが画像数学の動作方法であるため)。
たとえば、標準のIM の例のテスト画像では、完全に透明なピクセルのすべてに、完全に透明な黒を使用します。これは、アルファチャンネルをオフにするか、JPEG として保存することで確認できます...

  magick test.png test.jpg
[IM Text]
それでは、完全に透明な色がすべて完全に透明な「silver」色に置き換えられるように保存しましょう(アルファ背景オペレーターを参照)。

  magick test.png   -background silver -alpha Background   test_silver.png
[IM Text]
透明度(またはページ上の特別な JAVA スクリプト)がブラウザで動作している場合は、画像が正しく表示されるはずです。
しかし、(アルファを許可しない JPEG に保存することで)アルファチャンネルをオフにすると、PNG 画像が完全に透明なピクセルに実際に「silver」色を使用していることがわかります。

  magick test_silver.png test_silver.jpg
[IM Text]
ただし、これは半透明ピクセルを変更せず、これらのピクセルはページ背景または完全に透明に使用される色と混合することなく、通常の(非透明な)色を維持することに注意してください。半透明が関与しなくなったため、明るい色のエッジに沿って境界線がギザギザに見えたり(エイリアス)、「ハロー」効果が見られたりします。たとえば、黒と白の円のエッジを見てください。これらは「ギザギザ」エイリアス効果を示しています。ただし、グレーの代替色を使用すると、完全に透明に使用される元の「黒」色ほど悪くならないはずです。完全に透明な色の色を設定するもう1つの利点は、データの圧縮が改善されることです。処理中に使用された透明領域の基になる色が保持される場合がありました。これらは、単色ほど適切に圧縮されません。そのため、上記のように完全に透明な色を設定すると、最終的なファイルサイズを大幅に節約できます。ただし、多くの IM 画像処理操作で、画像に存在する完全に透明な色が完全に透明な黒に置き換えられるため、これは最後のステップとして行う必要があります。この操作を行うことがわかっているオペレーターのリストについては、アルファ背景オペレーターを参照してください。PNG 表示の問題に対する私の好みは、Microsoft が IE を修正することです。IE バージョン 7 では、すべての状況で PNG 透明度処理が完全に機能するようになるようです。

PNG と仮想キャンバス

通常、PNG は仮想キャンバスサイズ情報を保存しませんが、仮想キャンバスオフセット情報を保存し、存在する場合は、IM はそのオフセットと画像サイズに適した「キャンバスサイズ」を生成しようとします。これは、「-crop」、「-trim」、「-flatten」などの一部の画像オペレーターでは、操作または結果の一部として画像のキャンバスまたはページサイズを使用するため、覚えておくことが重要です。もちろん、「-page」設定と「-repage」オペレーターを使用して、仮想キャンバスサイズとオフセットを設定または削除できます。(ページ画像属性を参照)。たとえば、2番目の IM「magick」は、この PNG 画像に存在するオフセットを認識し、仮想キャンバスの境界内で画像が表示されるように、十分に大きなキャンバスを定義します(IM v6.1.7 で追加)。

  magick rose: -repage 0x0+40+30 png:- |\
      magick - -background LightBlue -flatten  png_offset_flattened.jpg
[IM Output]
ただし、PNG 形式では通常、キャンバスサイズ情報を保存しませんが、IM は PNG 画像に仮想キャンバスサイズのメタデータをいくつか追加します。ただし、このデータは IM コマンドでのみ使用可能であり、通常、他の PNG 画像フォーマットリーダーでは無視されます。たとえば、2番目の「magick」コマンドは、いくつかの仮想キャンバスサイズ情報を認識します...

  magick rose: -repage 100x100+10+10 png:- |\
      magick - -background LightBlue -flatten  png_size_flattened.jpg
[IM Output]
PNG が IM 以外のプログラムで処理されると、このキャンバスサイズのメタデータはおそらく失われます。キャンバスサイズ情報は、通常、PNG 画像ファイル形式の一部ではないことに注意してください。注意すべきもう1つの点は、'オフセット' 情報に(GIF 形式とは異なり)負のオフセットを持たせることができるということです。IM はこれらを適切に処理し、フォーマットを中間レイヤー画像の保存に適したものにします。
一部の Web ブラウザは、負のオフセットを適切に処理せず、奇妙な結果を生成します(firefox のあるバージョンでこの問題が発生しました)。Web ブラウザのような他のプログラムで使用される可能性のある画像では、負のオフセットを避けるのが最善です。

PNG の解像度、密度、単位

いくつかのテストの結果、PNG 画像ファイル形式は、'PixelsPerInch' の「-units」設定をサポートしておらず、'undefined' と 'PixelsPerCentimeter' のみであるようです。このため、IM は指定された密度/単位設定を 'PixelsPerCentimeter' の適切な値に変換します。この件については後日詳しく説明します

PNG のサブ形式

PNG デフォルト。経済的なフォーマットを使用して画像を保存します。
PNG8 ブール値の透明度と 256 色のカラーテーブルを含む GIF に相当する PNG。
PNG24 アルファチャンネルのない 8 ビット RGB チャンネル。特殊なケースにはブール値の透明度を含めることができます(下記参照)。
PNG32 完全な半透明度を持つフル RGBA 画像形式を強制します。
PNG48 アルファチャンネルのない 16 ビット RGB チャンネル
PNG64 16 ビット RGBA 画像(半透明を含む)
PNG00 入力画像から PNG の色とビット深度を継承します。
詳細については、画像タイプ I/O 設定を参照してください。
PNG8 は PNG グループではなく PhotoShop によって定義されました。複数の半透明色と完全に透明な色を処理できますが、IM はそうではないと想定しています。これにより、Internet Explorer v6 でデフォルトで正しく読み取れるように画像を強制的に動作させることができます。「Photoshop CS」プログラムはそれを読み取ることができます。
PNG48、PNG64、および PNG00 スタイルは、IM v6.8.2-0 以降で追加されました。
IM に画像カラーインデックステーブル(またはパレット)を作成させるには、IM がその画像を "PNG8:" 形式で保存します...

  magick {input_image}  -type Palette  indexed.png
パレットインデックス画像ではなく、単一の 8 ビットグレースケールチャンネルの使用を強制するには、次を使用します...

  magick {input_image}  -type GrayScale -depth 8  gray.png
(IM v6.3.5-9 で追加)透明度チャンネル付きのグレースケールを出力することもできます。

  magick {input_image}  -type GrayscaleMatte  gray_with_transparency.png
そして、単純な 2 色画像の場合...

  magick {input_image}  -type BiLevel  bitmap.png
PNG24 画像には特殊なケースがあります。画像にブール値の透明度のみが含まれており、すべての透明色が同じであり、その色が透明度にのみ使用されている場合、PNG コーダーは、その特定の色を透明として指定します。例えば...

  magick a.png -channel A -threshold 75% +channel \
          -background hotpink  -alpha background png24:a_png24_alpha.png
[IM Output]
この画像にはパレットはありませんが、オン/オフのアルファがあります。アルファチャンネルの-thresholdは、ブール値(オン/オフ)の透明度のみが存在することを確認し、アルファ背景オプションは、完全に透明なすべてのピクセルが特定の色であることを確認します。上記では、不透明なピクセルがその色で存在しないことを保証しないため、上記は失敗する可能性があります。

PNG 画像コントロールの書き込み

PNG 画像の書き込みをより適切に制御するために、Glenn Randers-Pehrson は、IM v6.5.2 用に多くのコーダー「グローバル設定を定義する」コントロールを改訂しました。これらには以下が含まれます...
-quality '{レベル}{フィルター}'
PNG 画像を保存する際の基本的な圧縮レベルとフィルター。
-define png:compression-strategy=zs
-define png:compression-level=zl
-define png:compression-filter=fm
書き込まれるPNG画像の圧縮システムを完全に定義します。-quality設定は通常、zlおよびfm値を設定しますが、zs設定は設定しません。
-depth {depth}
生成される画像の一般的な深度。通常は8ビットまたは16ビットに設定されます。
-define png:bit-depth={depth}
生成されるPNG画像ファイルの形式の深度を正確に指定します。これは、通常のIMの「-depth」制御をオーバーライドしますが、PNG画像の書き込み時のみ、および損失なしに変更できる場合にのみ適用されます。カラーマップ画像の場合、これはカラーサンプルではなく、カラーマップインデックスの深度です。
-define png:color-type={type}
書き込まれるPNGファイルの種類を正確に指定します。値は次のいずれかです。
'0' グレースケールの場合、2、3、4、8、または16の 'bit-depths'が可能です。
'2' RGBの場合、8または16の 'bit-depths'が可能です。
'3' インデックス付きの場合、1、2、4、または8の 'bit-depths'が可能です。
'4' Gray-Matteの場合
'6' RGB-Matteの場合
-define png:color-type='2'」は、画像データをsRGB値ではなくRGB値として保存するように強制するのに特に役立つことに注意してください。ただし、「-set colorspace sRGB」をリニアRGB画像で使用することで、同様の効果が得られます。ただし、プログラムが読み取り時にこのリニアカラースペースを尊重することを期待しないでください。これにはImageMagickも含まれます。
-profile PNG-chunk-{x}:{file}
{file}から{x}の位置に生のPNGプロファイルを追加します。{file}の最初の4バイトにはチャンク名が含まれ、その後にコロン ':' 文字とチャンクデータが続きます。{x}は、PLTEの前にプロファイルを配置する場合は 'b'、PLTEとIDATの間は 'm'、IDATの後は 'e'にすることができます。同じタイプのチャンクを複数書き込む場合は、後続のプロファイルが前のプロファイルを上書きしないように、{x}の後に短い一意の文字列を追加します。たとえば、...

  -profile PNG-chunk-b01:file01 -profile PNG-chunk-b02:file02
+set date:create
+set date:modify
これらは、ImageMagickがファイルを読み取るたびに作成される画像の「プロパティ」です。それらには(それぞれ)画像ファイルの作成時間(実際には権限/所有者/移動変更時間)と最後のファイル変更時間が含まれます。残念ながら、PNG画像ファイル形式は、このような画像データをPNG画像ファイル形式で書き込むことを好みます。このデータが異なると、他に何も変更されていなくても、生成されるファイルも異なります。
 magick logo: logo.jpg magick logo.jpg
    logo1.png

  sleep 2; touch logo.jpg      # change the JPG file timestamp
  magick logo.jpg logo2.png

  diff -s logo1.png logo2.png
  magick compare -metric RMSE logo1.png logo2.png null:
上記の「diff」は、次のメッセージを返します。
Binary files logo1.png and logo2.png differ
magick compare」が「0 (0)」を返し、画像がまったく同じ画像データを持っていることを示しているにもかかわらずです。IMはこれらのプロパティを読み込んだばかりのPNGファイルのタイムスタンプで上書きするため、「magick identify」を使用してPNGに記録されたこれらのプロパティの実際の値を確認することはできないことに注意してください。解決策は、「タイムスタンプ」なしでPNG画像を保存することです。

  magick logo: logo.jpg
  magick logo.jpg +set date:create +set date:modify logo1.png

  sleep 2; touch logo.jpg
  magick logo.jpg +set date:create +set date:modify logo2.png

  diff -s logo1.png logo2.png
今回「diff」が報告したのは...
Files logo1.png and logo2.png are identical
余談:バイナリ画像ファイルを比較するために、「cmp」、「md5sum」、または「sha1sum」などの他のUNIXプログラムを使用することもできます。後者の2つのプログラムは保証されていませんが、事実上だますことは不可能であり、複数のファイルを比較する(チェックサムを使用する)場合は高速です。GlennRPによるいくつかの追加のおかげで、「-define png:exclude-chunk=date」を使用して、PNGコーダーに日付関連のテキストチャンクを書き込まないように指示することもできます。

ImageMagick 以外の PNG 処理

PNGには多くのヘルパーアプリケーションがあり、最終的なPNG画像ファイルの生成に役立つ可能性があります。
pngtrans 画像とともに保存されたPNG情報
pngcrush 各画像について、最終的な選択を行う前に、利用可能なすべての論理PNG圧縮を使用して画像を圧縮しようとすることで、PNGの最適な圧縮を見つけようとします。もちろん、これには各画像に時間がかかる場合があります。
OptiPNG より新しいPNG圧縮オプティマイザー。
pngquant 可逆PNGオプティマイザー。ディザリングを使用してPNG画像を8ビットカラーパレットに縮小します。tRNSチャンクで伝達されるアルファ透明色を持つインデックス付きカラーPNGを構築します。
pngnq より新しい可逆PNG量子化ツール。8ビットカラーテーブルPNG画像を生成します。また、カラーパレットの使用を強制します。
pngout (上記のリンク先のページにもある)速度よりもスペースを優先するように最適化されたZIPコンプレッサーを使用するWindowsプラットフォームPNGオプティマイザー(オプションのGUI付き)。
これらのほとんどは、可逆または不可逆の手法を使用して、画像ファイルの最終的なサイズを改善するためのものです。

画像プロファイル

写真品質の画像のプロファイルを処理することは重要ですが、私が知る限り、これは非常に魔法のような技術であり、簡単なことではありません。すべての形式がプロファイルを使用するわけではありませんが、ほとんどの最新の形式が使用しています。これには、JPEG、PNG、TIFF、および(IM v6.3.4-1以降)GIFが含まれます。実際、多くのプログラムが画像内のカラープロファイルを理解したり、探したりさえしないという事実によって、問題は悪化しています。Alan Gibson(別名Snibgo)は、彼のSnibgo、ImageMagickプロファイルページで、さまざまなWebブラウザーがさまざまなカラープロファイルをどのように処理するかについてまとめました。これは一見の価値があります。画像に存在するプロファイルを一覧表示するには...

  magick identify -verbose image.tif | grep 'Profile-.*bytes'
一般的なプロファイル(および私が持っている情報へのポインター)には、次のものがあります...
EXIF デジタルカメラのメタデータ
ICC 画像カラースペースプロファイル
ICM Microsoft Color Management(ICCと同様)
IPTC 画像と作成者の情報
8BIM Photoshopメタデータプロファイル。クリップパスに関するデータなど...他に何がありますか?
XMP AdobeのExtensible Metadata Platform(XMP)(adobeページを参照)
IMがこの目的のために提供するいくつかの特別な出力形式を使用して、これらの一般的なプロファイルを抽出できます。たとえば...

  magick -define jpeg:size=64x64  image.jpg  iptc:profile.iptc
  magick -define jpeg:size=64x64  image.jpg  xmp:profile.xmp
上記の「-define」オプションは、JPEGライブラリへの「ヒント」として使用され、実際にメモリに読み込む実際の画像データ量を減らし、実際には使用する予定のないデータの処理を大幅に削減します。また、任意のプロファイルを、必要な情報を含む「blob」またはバイナリ文字列として挿入または再挿入することもできます。

  -profile 'profile_name:data_file'
つまり、ファイル「data_file」は、プロファイルprofile_nameとして画像に「そのまま」追加されます。IMまたはその他のアプリケーションは、特にそれを認識している場合を除き、そのようなプロファイルを無視します。

カラープロファイルの基礎

まず、一言...
カラーマネジメントは弱者のため -- それらで遊んではいけません
プロファイルをいじると、一般に事態が悪化します
したがって、色が良く見える場合は、そのままにしておきます。IMフォーラムのユーザーfhoech(その後姿を消した)は、カラープロファイルを使用して画像で使用されるカラースペースを変更するための基本的な紹介を何度も投稿しました... RGB、sRGB、CMYKはカラースペースではなく、カラーシステムです(IMは「-colorspace」演算子を使用して制御します)。単一のRGBまたはCMYKカラースペースはありませんが、文字通り無限の量の異なるカラースペースが各カラーシステムで可能です。画像の色を正確に特徴付けるICC(またはICM)プロファイルが必要です。通常、画像を記述するICCプロファイルは画像自体に埋め込まれている必要があります。そうでない場合は、「最善の推測」を試みる必要があります。これは単なる回避策です。ICC対応の画像エディターで画像を開き、画像で適切に見えるようになるまで、さまざまなICCプロファイル(変換しないでください!)を割り当てます(モニターが調整されている必要があります。そうしないと、色の適切なプレビューが得られません)。次に、プロファイルが埋め込まれた画像を保存します。2つのプロファイルが必要な理由について:ソースプロファイルは、現在の画像の色の状態を記述します。宛先プロファイルは、変換後の出力画像の色の状態を記述します。また、特定の宛先プロファイルに変換する場合は、細心の注意を払う必要があります。たとえば、非コート紙へのオフセット印刷を記述するプロファイルを使用するが、コート紙への印刷に画像を使用する場合、当然のことながら、適切な結果は得られません。出力プロファイルは、意図された出力状態を正確に表す必要があります。減法混色のカラースペースから加法混色のカラースペース(またはその逆)に変換する場合、正しいプロファイル(変換の両ステップ)を使用しないと、ほとんどの場合「正しい」色または明るさは得られません。ただし、「偶然」に的を射る可能性はあります。International Color Consortiumからカラープロファイルをダウンロードできます。

プロファイルを介したカラースペースの変更

このように、単純な魔法のようにカラースペースを直接設定できますが...

  magick cmyk_image.jpg -colorspace rgb rgb_image.jpg
CMYKをRGB JPEGに変換するための最良の解決策は、「-profile」演算子でカラープロファイルを使用することです。Raf Lenaertsは、ImageMagick内で「-profile」演算子を使用する際の次のルールを指摘しました...
埋め込みプロファイルがない場合、最初の「-profile」は入力プロファイルです。2番目の「-profile」は、出力プロファイルを定義します。
埋め込みプロファイルがある場合、単一の「-profile」演算子は、出力プロファイルをすぐに定義します。
要約すると...
  • -profile」は、入力ファイルと出力ファイルの間に配置する必要があります。
    これは実際には標準のIMコマンドライン処理の慣習です。
  • 存在する場合は、iccプロファイルを削除するために、「+profile」を「icm」とともに使用します。
  • 次に指定された最初の「-profile」が、入力プロファイルです。
  • 次に指定された2番目の「-profile」が、出力プロファイルです。
すべての画像にプロファイルを使用するには、3つの「-profile」操作(削除、入力、出力プロファイルオプション)が必要です。たとえば、入力画像にすでにカラープロファイルがある場合は、1つだけが必要です。

  magick rgb_image.jpg -profile USCoat.icm cmyk_image.jpg
しかし、画像にプロファイルがない場合(または、既存のプロファイルがないRGB画像であることがわかっている場合)は、次を使用できます...

    magick rgb_image.jpg +profile icm \
            -profile sRGB.icc  -profile USCoat.icm cmyk_image.jpg
これにより、結果の画像がCMYK USCoat.icmプロファイルに設定されます。別のCMYKプロファイルはSWOP.icmプロファイルです。逆の場合(画像にすでにプロファイルがある場合)は、次を使用します...

    magick cmyk_image.jpg -profile sRGB.icc rgb_image.jpg
警告:元の画像に、たとえばCMYKプロファイルなどのプロファイルがすでに含まれている場合、2回のプロファイル変換を行うことは良くありません。例として、

    magick cmyk_image.jpg -profile "CMYK.icc" -profile "RGB.icc" \
                  output_image.jpg
CMYK -> CMYK -> RGB変換が発生します。しかし、CMYKは対称ではないため、余分な変換ステップによって、悲惨な色の変換が発生する可能性があります。(IMフォーラムのディスカッション「ICCプロファイル変換の動作に関する質問」を参照してください)

カラープロファイルの変更

magickしたい画像はすべて、ICCプロファイルが埋め込まれている必要があります。同じCMYK ICCプロファイルを使用して画像をmagickするには、次のようにします...

  magick rgb_image.jpg -profile CMYK_PROFILE cmyk_image.jpg
これにより、知覚的なレンダリングインテントを使用してmagickが実行されます(デフォルト)(レンダリングインテントの詳細な説明については、色空間変換を参照してください)。知覚的なレンダリングインテントによる結果は、ICCプロファイルの作成に使用されたソフトウェアによって大きく異なる可能性があるため、「-black-point-compensation」を「-intent relative」と組み合わせて使用して、期待に近い結果を得ることができます。

  magick rgb_image.jpg  -intent relative -black-point-compensation \
          -profile CMYK_PROFILE     cmyk_image.jpg
-black-point-compensation」と「-intent」の設定は、有効にするために「-profile」操作の前に指定する必要があります。
-black-point-compensation」オプションは、IM v6.2.7-0に追加されました。
カラープロファイルはInternational Color Consortiumからダウンロードできます。

EXIF InterColorProfile

上記のカラープロファイルの処理に加えて、多くのデジタルカメラは、EXIFプロファイル属性「InterColorProfile」にカラープロファイル情報を保存します。この属性は、「カラープロファイルが埋め込まれていない場合に想定される」ことを意図していると、ドキュメント「カラーマネジメントとAdobe Photoshop 7」に記載されています。

IPTC プロファイル

IPTCプロファイルは、キャプション、クレジット、作成者、キーワードなど、画像の識別属性を保存するために画像で使用されます。IPTCプロファイルを画像に追加する場合は、単一の-profileが必要です

  magick image.jpg -profile iptc iptc_image.jpg
画像にプロファイルが含まれている場合は、これで保存できるため、そのプロファイルを他の類似の画像に追加できます

  magick iptc_image.jpg iptcData.iptc
または、編集できるプロファイルのテキストバージョンを抽出できます

    magick iptc_image.jpg IPTCTEXT:iptcData.pro
たとえば、これはfcaserioIMフォーラムで提供したプロファイルです。
[IM Text]
このプロファイルを画像に追加するには、次を使用します

  magick image.jpg +profile 8BIM -profile 8BIMTEXT:iptcData.pro \
          iptc_image.jpg
その画像は、IPTCプロファイルも含むTIFFプレビュー(EPT)付きのEPS(Encapsulated Postscript)に変換できます。(Tee Tanneに感謝します)。

  magick itpc_image.jpg  EPT:image.eps

XMPプロファイル

TIF画像からXMPプロファイルを抽出します...

  magick picture.tif metadata.xmp

ベクター画像形式に関する注意

世界には、複数の画像ストレージスタイルがあります...
ラスター 色付きのピクセルの配列を使用して保存および処理される画像。ラスター画像形式には、GIF、PNG、JPEG、TIFFなどがあります。画像は、異なる色を表す複数の配列(チャネル)で構成でき、1つの画像ファイル形式ファイルに複数の画像、レイヤー、またはフレーム(使用法に応じて)を含めることができます。
ベクター 画像は、線、太さ、タイル、グラデーション、およびより大きな複合オブジェクトの観点から定義されます。形式には、SVG、Postscript、PDF、FIG、DXF、WMF、さらにはTTFフォントが含まれます。これにより、画像のサイズを変更したり、品質を損なうことなく大幅に拡大したりできます。また、このような形式を編集する際に、通常は下のものを破壊することなく、オブジェクト全体を移動できます(オブジェクトレイヤー)。
フラクタル 画像は、古い絵画のような複雑な画像を極端に圧縮するために使用される特殊なレアケースです。ただし、私が知っている唯一の使用法は、非常に高価な商用製品です。それ以外では、マンデルブロ集合やジュリア集合などの複雑な数学的オブジェクトや、スクリーンセーバー(IFS)でランダムに色の飛沫を生成するためにも使用されます。めったに見られません。
なぜこれが重要なのですか?IMは「ラスター画像プロセッサー」であり、ベクター形式の1つで保存された画像を読み書きできますが、画像を内部ラスター画像との間で変換することによってそれを行います。したがって、ベクター形式から別のベクター形式に画像をmagickしようとする場合、IMは現在定義されている解像度または密度でこの画像を本質的にラスタライズします。これは、使用する予定の出力デバイスに適していることが望ましい(可能性は低い)です。言い換えれば、IMからの出力は、真のベクター形式になることはありません。内部のラスター形式をベクター形式ファイルにmagickすることはできますが、その結果はラスター形式の画像の周りの表面的なベクターイメージラッパーにすぎません。そして、ラスター画像が出力デバイスに対して適切に(適切な解像度で)定義されていない限り、結果は特に良くありません。残念ながら、IMを初めて使用する人はこれについて何も知りません。彼らはIMをPDFからPostscriptに変換できるコンバーターと見なしており、「ブロック状」のエイリアシング効果、「色あせた」色、または意図した出力デバイスではまったく見栄えのしないぼやけた画像を生成します。これにより、私が言おうとしていることにつながります...
「ベクター画像」から「ベクター画像」への変換にはImageMagickを使用しないでください
例:PDF、PS、SVGのような形式間の変換

言い換えれば、適切なジョブには適切なツールを使用してください。そして、この状況では、ImageMagickは適切なツールではありません。

つまり、IMをそのような変換に使用できないということではありません。結局のところ、ほとんどのプリンターとモニターは、実際に紙に印刷するために画像をラスタライズします。違いは、プリンターが使用しているハードウェアに必要な解像度を知っているということです。ImageMagickは知りません。ベクター画像をラスターに変換する(およびそのような変換を改善する)例については、例Postscript/PDFプリフォーマットテキストとグラフィックス入力を参照してください。SVGとユーザー生成のベクター画像については、SVG画像処理を参照してください。また、フォントサイズ、解像度、およびポイントサイズに関する情報も役立つ場合があります。特に、描画されたテキストフォントに対する「-density」の影響に関して役立ちます。

IM以外の代替

本当にベクター形式間の一般的な変換を行う必要がある場合は、プログラムUniConvertor、Sk1 Project(通常は標準のLinuxパッケージとして入手可能)とVectorSectionを使用して、画像を実際にラスタライズせずにベクターからベクターにmagickできます。Postscriptを他のベクター形式に一般的に変換するには、システムの追加パッケージリポジトリで通常利用可能な「pstoedit」を確認してください。また、epstopdfも確認してください。これは、Comprehensive TeX Network(CTAN)の一部です。TeXとLaTeXは、UNIXドキュメント(書籍と科学論文)のテキスト処理システムです。PostscriptおよびPDF形式に関する多くのツールがあります。SVGからPDFへの変換については、Wolfgang Hugemann <Auto@hugemann.de>は、最も簡単なベクターからベクターへの変換は、ブラウザー(Firefox)でSVGを表示し、PDFプリンタードライバーを使用して印刷することであると提案しています。ただし、「Uniconvertor」も使用できます。

その他の画像ファイル形式

もちろん、IMが使用および理解できる他の画像ファイル形式は多数ありますが、これらのあまり「一般的」ではない形式の多くは、特定の目的に特化しており、多くの場合、目的どおりに機能させるには、調整やその他のオプションが必要になります。これらのファイル形式はお勧めしませんし、私自身も通常は使用しません。ただし、IMメーリングリストまたはIMフォーラムで報告されたさまざまなメモ、手法、およびオプションを記録するように努めています。これにより、他の人も収集した情報を使用できます。メモの多くは未処理の形式であり、以下のメモへのさらなる貢献や書き直しを受け入れます。

Postscript(PS、EPS)およびAdobe PDF

基本的な処理については、Postscriptテキスト処理およびベクター画像形式に関する警告を参照してください。Postscriptとその関連形式(PDFなど)の主な問題は、それが複雑なページ書式設定言語であることです。つまり、この形式はプログラムであり、実際には画像形式ではありません。つまり、IMは別の外部プログラム(または委任)に依存してプログラムを「実行」し、生成された画像を返すことを余儀なくされています。

カプセル化されたPostscript(EPS)

カプセル化されたPostscriptは、実際には通常のpostscript(ベクター画像形式)とまったく同じですが、単一ページの画像であり、画像がカバーする正確な領域を定義するために「境界ボックス」エントリが存在します。この形式は、他のプログラムが定義するpostscriptを他のpostscriptドキュメントに挿入する際に、画像を移動および拡大縮小できるように設計されました。IMは、基本的にpostscriptと同じ方法で処理します。(上記を参照)。
  magick image.jpg -compress none eps2:image.eps
JPEG圧縮されたEPSファイルを作成するには、「EPS2:」または「EPS3:」を使用します。注:EPS画像へのプロファイルの追加は「ToDo」リストにありますが、現在サポートされていません。

Postscript/PDF入力

この形式はベクター画像形式であるため、「-page」や「-density」などの設定の影響を受けます。Postscript(EPSおよびPDF形式も同様)の読み込み例は、Postscript形式のテキストで提供されており、まずこちらを読む必要があります。ただし、これらの形式の読み込みは非常に複雑です。これらは高品質のレーザープリンターで印刷ページを生成するために特別に設計された完全なコンピューター言語であるためです。これはImageMagickの範囲を大きく超えているため、PostscriptおよびPDFページを読み込んでラスタ画像に変換するために、「ghostscript」という特別なデリゲートプログラムに依存しています。重要な点:IMはGhostscriptを使用してPostscriptファイルを特定の解像度でラスタライズするため、Postscriptファイル内のラスタ画像は、そのラスタ画像の正確な密度が分かっていない限り、ぼやけたり歪んだりすることがよくあります。これは、Postscriptプログラム自体がラスタ画像を回転させたり、その他の方法で操作したりしないことを前提としています。実際、複数のデリゲートが存在し、状況に応じてIMによって選択されます。たとえば、「-channel RGBA」が設定されているかどうかによって、「ps:color」(「bmpsep8」ghostscriptデバイスを使用)と「ps:alpha」(「pngalpha」を使用)が選択されます。「pngalpha」ghostscriptデバイスは1ページ/1画像しかサポートしておらず、PDFは一般に複数ページであるため、デフォルトでは「ps:alpha」ではなく「ps:color」デリゲートが使用されます。 「pngalpha」デリゲートメソッドを選択するには、画像を読み込む前に「-channel RGBA」を使用してください。ページの数だけが必要な場合は、ghostscriptを使用する方がはるかに高速になる可能性があります。

  gs -q -sPDFname=document.pdf   pdfpagecount.ps
  %%Pages: 96
WindowsとGhostscriptは、Windowsレジストリを使用する必要があるため、もう少し複雑です。
ImageMagickの特別なPDF読み込みオプション
PDF処理の特別なオプション...
-units PixelsPerInch
PDFドキュメントの処理(読み取りまたは作成)時に設定する必要があります。これが何をするのかはわかりませんが、正しく動作させるには設定する必要があるという報告があります。
-define pdf:use-cropbox=true
Adobeが生成したPDFファイルのように、デフォルトの「mediabox」ではなく「cropbox」を使用します。(基本的に、PDF画像からのghostscript変換に「-dUseCropBox」を追加します。注:これはPDFに1ページしかない場合に機能しますが、複数ページのPDFの場合は正しくクロップされません。)
-define pdf:use-trimbox=true
Adobeが生成したPDFファイルのように、デフォルトの「mediabox」ではなく「trimbox」を使用します。
入力デリゲートの変更
システムデリゲートの変更は危険であり、間違いがあるとIMがPostscript/PDFファイルを読み取ることができなくなる可能性があります。また、セキュリティ(「ハッカー」)対策のため、システム定義のデリゲートを個人デリゲートで置き換えることはできないため、管理者権限が必要になる場合があります。デリゲートXMLの構文と意味、および個人用の入出力デリゲートの作成の詳細については、Image Formatのデリゲートとコーダーを参照してください。フォーラムトピックEPSをJPGに変換するのが不安定では、システムの「delegates.xml」を編集して「-sDEVICE=bmpsep8」を「-sDEVICE=bmp16」に置き換えることが提案されました。他のユーザーは、これを「-sDEVICE=pnmraw」に変更すると、よりうまく機能することを発見しました。私はこれを自分自身で試したことがないので、これについて、またはどのバージョンのGhostscriptに適用されるかについての保証はできません。さらに情報をお持ちの場合は、お知らせください。CMYK PostscriptまたはPDFファイルをお持ちの場合は、Johnのブログで、デリゲートエントリを変更する方法(「-dUseCIEColor」ghostscriptオプションを追加)を詳しく説明しています。これにより、ghostscript変換がこのPostscriptの処理を行います。別の可能性としては、プログラム「pdftoppm」または「xpdf」パッケージの「pdfimage」を起動する個人用の「デリゲート」を作成することです。たとえば、タグが「pdfalt」と呼ばれている場合、ストリームは次のようになります。

  magick pdfalt:image.pdf image.png
デリゲートの作成を試してみたい人はいますか?教えてください!また、「pstoedit」を使用することもできます。これはPostscriptファイルを他のベクター形式に変換したり、PostscriptをImageMagick APIに渡してビットマップに変換したりできます。私はこれを実験またはテストしたことがないので、フィードバックをいただければ幸いです。

PDFラスタ画像抽出

PDFで使用されるベクターグラフィックスの中心となるのは、特定のサイズまたは「密度」へのPDFページのレンダリングです。テキストや線画には最適です。ただし、これは、PDF内のすべてのラスタ画像(ピクセル配列)のサイズを変更する必要があることも意味します。しかし、サイズ変更は「不可逆」な操作であり、そのラスタ画像の元の密度を使用しない限り、一部の画像が劣化します。これはPDF内の画像ごとに異なる可能性があります。したがって、「密度」参照なしでPDFからラスタ画像を抽出できることは有利です。 poppler-utilsまたは「xpdf-utils」ソフトウェアパッケージのいずれかの一部である「pdfimages」プログラムを使用して、ラスタ画像を直接抽出できます。これらのソフトウェアパッケージには、PDF処理に役立つ可能性のある他の多くのツールも含まれています。 Windows用PopplerXpdf Readerを参照してください。GhostScriptを管理しているのと同じ人々によるパッケージ「MuPDF」の「mutool」もご覧になるかもしれません。テキストと画像を抽出するためのオンラインツールはSumnotes(限定的な無料トライアル付きの商用)です。より低いレベルでは、Wolfgang Hugemann氏は、PDFに含まれるすべての画像(特にスキャナーで生成されたPDFから)を抽出できると言います。基本的には、「stream」と「endstream」の間の任意のバイトシーケンスを抽出し、別のファイルとして保存することで抽出できます。

PDFテキスト抽出

GhostScriptプログラム「ps2ascii」または「pstotext」を使用できます。または、テキストと画像を両方とも処理する別の方法として、「pdftohtml」をご覧ください。Ross Presser氏によると、XML出力は「段落を再構成するのに非常に優れています。」とのことです。また、「pdftk」プログラムは、PDFを「解凍」して直接編集できるようにしたり、破損したPDFを「修復」したりできます。

Postscript/PDF出力オプション

次の設定は、Postscript、Encapsulated Postscript、およびPDF画像形式の出力に影響を与えることが知られています。「-page」、「-gravity」、「-compress」、「-density」。デフォルトでは、PDF画像の出力に圧縮は使用されないため、PDFファイルは必要以上に大きくなることがよくあります。次の表は、IM圧縮モードと、使用される結果のPostscript圧縮モードを等しく示しています。
PS/PDF圧縮の意味
圧縮 画像 '/Filter [ ... ]' 設定
"-compress none" '/ASCII85Decode'
"-compress zip" '/FlateDecode'
"-compress jpeg" '/DCTDecode'
"-compress lzw" '/LZWDecode'
"-alpha off -monochrome -compress fax '/CCITTFaxDecode'
"+compress"
"-compress rle"
    その他すべて
'/RunLengthDecode'
PDFに推奨される圧縮は、Zip(Deflate圧縮)またはGroup4(Fax)圧縮です。

  magick image.gif -alpha off -monochrome -compress Zip -quality 100 \
          -units PixelsPerInch -density 600  image_deflate.pdf

  magick image.gif -alpha off -monochrome -compress Group4 -quality 100 \
          -units PixelsPerInch -density 600  image_group4.pdf
これらの2つのコマンドは、白黒ページの直接変換よりもはるかに小さいPDFファイルを生成します。ただし、どちらが小さいかは画像によって異なり、結果のサイズを試してテストしない限り判断できません。

Postscript/PDF出力の代替案

PDFはベクター画像(ドキュメント)形式であり、IMはラスタ画像プロセッサであることを忘れないでください。つまり、IMが作成するPDFドキュメントは、基本的に1ページあたり1つのラスタ画像で構成されます。PDFドキュメントに出力される画像は、特定の解像度(またはピクセル密度)で固定されるため、他の解像度で表示または印刷すると、ピクセルの歪みの問題が発生する可能性があります。また、テキストドキュメントの場合、テキストとフォントおよび書式設定のメタデータを含むプレーンテキストは、常にテキストのスキャンされたラスタ画像よりもはるかに小さく、より適切にレンダリングされるため、ラスタ画像を使用するのは無駄です。このため、他のPDF作成プログラムの方がニーズに適している場合があります。これにより、画像を画像として、テキストをテキストとして保持できるため、テキストと画像をより適切で論理的な方法で配置したり、テキストを挿入したり、矢印や接続線をより論理的な方法で重ねたりできます。たとえば、TeXおよびLaTeXシステムが提供するサポートプログラムを参照することをお勧めします。Comprehensive TeX Network (CTAN)を参照してください。別のツールセットは、Multivalent Document Toolsです。もちろん、このようなプログラムの自動化は困難ですが、過去にはシンプルなFIGベクターグラフィックファイル形式(Xfigを参照)を使用して、テキストとグラフィックを自動的に配置したPostscriptおよびPDFドキュメントを生成しました。画像からPDFへの変換ツール... 画像をPDFファイルに変換することを専門とするツールsam2p。したがって、ImageMagickですべての前処理を行い、「sam2p」を使用して最終的な変換を行います。さらに、結果をA4用紙に合わせて調整するための小さなスクリプトも付属しています。sam2p READMEより
Q58) sam2pは、指定されたページサイズに比例して(つまり、アスペクト比を維持して)、ページの中央に配置されたPDFを生成できますか?
A58) いいえ、ただし、sam2pにバンドルされているPerlスクリプトsam2p_pdf_scale.plは、sam2pで作成されたファイルを後処理できます。たとえば、PDFをA4用紙に拡大縮小して中央に配置するには、次のようにします。
----8<----
sam2p input.img output.pdf
sam2p_pdf_scale.pl 595 842 output.pdf
----8<----
残念ながら、IMで作成されたデフォルトのPDFでは機能しません。-- IMユーザーメーリングリストより、Sebastian Krause氏 複数ページのPDFドキュメント...IMとそのラスタライズの問題に頼らずに、Perlを使用して複数のPDFファイルを結合できます...
----8<----
#!/usr/bin/perl
#  Script   pdf-combiner.pl
use strict;
use warnings;
use PDF::Reuse;

prFile('combo.pdf'); # Output.
for (qw/a b c d/) # Inputs.
{
  prImage("result_$_.pdf");
  prPage();
}
prEnd();
----8<----
また、JAVAツールキットを使用して、IMで生成された画像をPDFにマージすることで、IMで生成される単純なPDFよりも優れたPDFを作成することもできます...
----8<----
#!/bin/bash

for x in ./*.jpeg
do
    echo $x to ${x}.pdf
    magick $x -quality 75 ${x}.pdf
done

echo Merging...
java tool.pdf.Merge *.pdf
----8<----
IMディスカッションフォーラムの別のユーザーは、複数のPDFページを結合するためにPDFjamを使用することも提案しました。

PbmPlus / NetPBM画像ファイル形式PBM PGM PPM PNM PAM

PbmPlus または "NetPBM" 画像操作フィルター(Unix コマンドライン)。これらの画像フォーマットには、"PBM" (ビットマップ)、"PGM" (グレースケール)、"PPM" (カラー)、"PFM" (浮動小数点、HDRI 用)、"PAM" (任意のフォーマット)、"PNM" (任意の NetPBM フォーマット) など、さまざまな種類があります。これらの各フォーマット("PAM" と "PFM" を除く)は、「raw」バイナリ形式(IM または NetPBM で書き込む際のデフォルト)またはプレーン ASCII テキスト形式("-compress None" を使用して設定)のいずれかで使用できます。IM はもちろん、これらのいずれも読み取ることができます。このフォーマットは、ほとんどの他の画像ファイルフォーマットのように "sRGB" ではなく、"linear-RGB" カラースペースのみを使用すると見なす必要があります。ただし、"linear-RGB" を使用する場合は 16 の深度を使用する必要があるため、深度 8 の画像では大きな丸め誤差が発生する可能性があるため、注意が必要です。NetPBM フォーマットは通常、ファイルごとに 1 つの画像を保存します。ただし、IM や他の多くの NetPBM ユーティリティは、複数の画像を単純に連結したファイルを読み書きします。そのため、画像を書き込む際には、ファイルを書き込むときに適切な "-/+adjoin" 設定を行うことをお勧めします。(詳しくは複数画像シーケンスの書き込みを参照してください)。PPM ファイルフォーマットは、"ghostscript" デリゲートを介して Postscript および PDF 画像の変換中に使用される通信フォーマットであるため、ImageMagick にとって特に重要です。また、"ffmpeg" コマンドからのビデオ画像処理などの主要なフォーマットでもあります。入力には、任意の「品質」または値の範囲(最大 16 ビットまたは 65535 の「深度」)を使用できます。たとえば、ここに、5 という非常に珍しい値の範囲を使用して「ステップグラデーション」を生成する例を示します。このような奇妙な品質範囲を使用できる他の画像フォーマットは知らない。

  echo "P2 6 1 5   0 1 2 3 4 5" | \
      magick - -scale 120x20  pgm_step_gradient.gif
[IM Output]
リサイズされたグラデーションも参照してください。ここでは、NetPBM テキスト画像を使用して非常に小さな(2〜4 ピクセル)画像を作成しています。上記は、「ASCII」サブフォーマットがいかに有用であるかを実証しています。特に、シェルスクリプトに画像を追加したり、数値の配列から画像を生成したりする方法として役立ちます。たとえば、TXT:列挙されたピクセルフォーマットを参照してください。この使用例の 1 つがヒストグラム再配分手法の例に示されています。

PbmPlus/NetPBM 対 ASCII データフォーマット

ASCII 出力は、特定の画像からカラー値を抽出する最もクリーンな方法である可能性が高く、スクリプトや単純な画像処理に最適です。

  magick -size 20x2 xc: +noise random -channel G -separate +channel \
          -depth 16  -compress none   pgm_random_values.pgm
[IM Text]
出力がプレーンテキストの場合、行は画像の行の長さに合わせて書き込まれるわけではないことに注意してください。ただし、さまざまな UNIX テキストユーティリティを使用して出力を再フォーマットできます。たとえば、「tr」テキストユーティリティを使用して、複数のカンマとスペースを単一の改行に置き換えて圧縮すると、すべての値が 1 行に 1 つの値になり、スクリプトで処理しやすくなります。また、IM では、PGM および PPM の出力品質に対して「深度」8 または 16 のみを指定できます。PbmPlus フォーマットでは、値に任意の「maxval」を使用できます。これは 2 の累乗ではない値でも使用できます。16 ビット深度(maxval 65535)のハードリミットがあります。NetPBM 画像の実際の「maxval」のより細かい制御は、現在は不可能ですが、将来、特別なコーダー設定を介して追加できる可能性があります(リクエストに応じて)。ここに、組み込みの rose 画像から抽出した、0〜255 のグレースケール値の 9x9 配列を出力する別の例を示します。「pnmtopnm -plain」を使用したため、各ピクセル行の最後に改行が表示されます。

  magick rose:[9x9+0+0] -colorspace gray -transpose -depth 8 PGM:- |\
    pnmtopnm -plain
[IM Text]
この NetPBM コマンドの古いバリアントには、「pnmnoraw」と「pnmtoplainpnm」があり、「pnmtopnm -plain」と同じことを行います。開発者がどのように行うべきかを決めることができないように見えるため、NetPBM パッケージの man ページを確認してください。これらの PbmPlus プログラムはいずれも、「イメージ行」の最後に改行を出力しますが、ImageMagick コーダーはそうしません。これにより、スクリプトでの画像処理が非常に簡単になります。ここに、非常に小さな ASCII PBM ビットマップを出力する例を示します。

  magick label:O pbm: | pnmtopnm -plain
[IM Text]
PBM ビットマップは、値の間にスペースを出力する必要さえないことに注意してください。ただし、スペースは許可されています(IM はそれらを出力しますが、PbmPlus ユーティリティは出力しません)。また、ビットマップの場合、白='0'(背景)と黒='1'(前景)であることに注意してください。これは、XBM や PBM などのビットマップ形式の標準であり、ImageMagick はこの規則を理解しています。これが望ましくない場合は、画像を反転するか、色で画像をレベル調整して、ビットマップ画像の目的の色を設定します。

PbmPlus/NetPBM 深度制御

場合によっては、PGM および PPM 画像の深度をより詳細に制御したい場合があります。たとえば、0〜99 の値のパーセンタイル範囲を使用する場合などです。1 つの方法は、NetPBM プログラム「pamdepth」を使用することです。これにより、画像を任意の範囲(最大 65335 の内部制限)に変換できます。たとえば、ここに、0〜99 の出力値範囲を使用する値の画像配列を示します。

  magick -size 9x9 radial-gradient: -depth 16 PGM:- |\
    pamdepth 99 | pnmtopnm -plain
[IM Text]
ここに別の例を示しますが、今回は反転レベル演算子を使用して出力値の範囲を設定します。これにより、値の変換をより詳細に制御できますが、PGM 画像の「maxval」は画像の最大値と一致しません。

  magick -size 9x9 radial-gradient: +depth +level 0,99 PGM:- |\
    pnmtopnm -plain
[IM Text]
上記のコマンドの "+depth" は、画像ファイルの深度を IM 品質レベルと同じに設定するために不可欠です。必要なのは、3 行目を「99」の値にリセット(または無視)し、オプションで画像を「raw」バイナリ NetPBM 画像フォーマットに圧縮することだけです。ただし、PbmPlus/NetPBM には最大深度 65535(16 ビット)があるため、これは IM Q8 または Q16 バージョンでのみ機能します。

PbmPlus/NetPBM コメント

IM は、PbmPlus/NetPBM ファイル形式のヘッダーの「コメント」行を読み書きし、保持します。たとえば...

  magick -size 2x2 xc:grey -set comment "by Anthony" -compress none PGM:-
[IM Text]
ただし、PbmPlus 自体を含むほとんどのアプリケーションは、このようなコメントを無視し、ファイルを処理するときに失うことさえあります。

  magick -size 2x2 xc:grey -set comment "by Anthony" PGM:- | pnmtopnm -plain
[IM Text]

PbmPlus/NetPBM 対 ImageMagick

PbmPlus/NetPBM 画像処理スイートは、かつてコマンドライン画像処理で ImageMagick のライバルでしたが、画像処理の処理と処理には、まったく異なる(より低レベルの)パイプラインフィルタリング哲学を使用しています。これにより、シェルスクリプトでの使用は容易になりますが、一般的または非常に複雑な画像処理での使用はより困難になります。また、画像は画像ファイル形式との間でより頻繁に変換され、一般的に多くのテンポラリファイルを使用する必要があります。PbmPlus/NetPBM 画像は、一般的に透明度を処理せず(ただし、新しい PAM 形式は処理します)、画像データで画像メタデータを渡す一般的な方法を提供しません。すべての PbmPlus/NetPBM フォーマット(ImageMagick の内部フォーマットと同様に、MIFF 画像ストリーミングを参照)は、画像を 1 つずつ連結または追加するだけで、複数画像のストリームを処理できます。これにより、ビデオ処理などの、パイプライン化されたマルチ画像ストリーミング画像処理方法に非常に適しています。ただし、一部の PbmPlus/NetPBM プログラムは単一の画像のみを処理し、複数画像のストリームを処理しないことに注意してください。ただし、より低レベルであり、ImageMagick より前に存在していたため、ビデオ画像出力や処理などの生画像出力によく選択されます。PbmPlus 画像は科学データにもよく使用されるため、画像は一般的に、より一般的な非線形「sRGB」カラースペースではなく、「線形 RGB」カラースペースとして保存されます。注意が必要です。両方のパッケージは共存でき、ImageMagick の代わりに PbmPlus/NetPBM 実装を使用することが知られています。通常、特定の下位レベルの画像処理、または画像形式で保存された値の配列を使用したスクリプトを作成する場合に使用します。2 つのパッケージはうまく連携しており、両方ともインストールして、本格的な画像処理に使用することをお勧めします。
私は、そのソフトウェアでの作業がほとんど行われていなかった時期に、NetPBM の重要な 1995 年のパッチリリースを行った人物です。このため、私は PbmPlus ソフトウェアとその単純な画像ファイル形式について十分に理解しています。

それ以来、さまざまな人々によって何度も再開発され、最終的には適切なオープンソースプロジェクトになったようです。さまざまなプログラムが成熟し、よりうまく連携し始めているようです。

ただし、主な問題は、メタデータと複雑さの欠如です。しかし、ファイル形式としての単純さが最大の利点であり、非常に低レベルの画像およびデータ操作に最適です。


TIFF

  The TIFF format is the propriety format for PhotoShop.  However it is so
  bloated with features, and has been modified by just about every application
  that has cared to use it, that no program, not even photoshop can handle ALL
  its variations.  Photoshop however has the best chance at reading it.

  I would steer clear of the TIFF image file format unless you are
  specifically working with photoshop, or the application accepts no other,
  better defined, image file format.

  I don't use the TIFF image file format, or Photoshop. If you use this format
  with IM extensively, perhaps you would like to submit your findings to me,
  to include here.  That way you  can help your fellow TIFF users.

  Whether a specific software package can read a TIFF, all you can do is try
  it and see.  That is, the problem with this format.



  TIFF and Density (resolution) in photoshop...

  See Photoshop and Density
  for the details and solutions to this problem



  JPEG to TIFF conversion...

    magick image.jpg image.tif

  This will either save the image inside the TIFF file using JPEG compression
  (which was inherited from the JPEG input.  Or it will error such as...

      Error: "JPEG compression support not configured"

  This is caused by the TIFF library not including JPEG compression support.

  Either way  THIS IS BAD.

  You can get around this problem by changing the setting to use a different
  compression algorithm:

      magick image.jpg -compress zip  image.tif
      magick image.jpg -compress lzw  image.tif
      magick image.jpg +compress      image.tif

  WARNING:  -compress Group4  with a TIFF works, but ONLY if you remove all
  transparent and semi-transparent pixels from the image.  Typically you can
  make sure this is done the same way as JPEG images above, using
     -background {color} -alpha remove
  See Removing Transparency from Images
  just before the final save (the first only works for single images).



  TIFF (and MIFF)  floating point precision files (Add to IM v6.2.6-5)...

  This is especially good for HDRI image processing (which uses floating point
  inside IM itself)

  For single precision (float) set...
         -depth 32 -define quantum:format=floating-point
  For do8uble precision (doubles) set...
         -depth 64 -define quantum:format=floating-point

  14 bit TIFF images...
       magick logo: -sharpen 0x1 -depth 14 logo.tif

       tiffinfo logo.tif

       Image Width: 640 Image Length: 480
       Resolution: 72, 72 (unitless)
       Bits/Sample: 14
       Compression Scheme: LZW
       Photometric Interpretation: RGB color
       FillOrder: msb-to-lsb
       Orientation: row 0 top, col 0 lhs
       Samples/Pixel: 3
       Rows/Strip: 2
       Planar Configuration: single image plane
       DocumentName: logo.tif
       Software: ImageMagick 6.2.8 07/27/06 Q16 https://imagemagick.dokyumento.jp

  12 bit TIFF images...

  To magick 16-bit TIFF images to 12-bit:
        magick image.tif -depth 12 image-12.tif

  Pure black and white images...

       magick image ...  -type truecolor -type bilevel   image.tiff

    Results in normal images and the smallest filesize, and correct
    black/white handling in Photoshop, Microsoft Windows Picture and Fax
    Viewer.
       TIFF discussion,
       RQuadling.


  Enden and fill-order
    The order in which TIFF data values are stored is controled by
       -endien                   Global order of the bytes
       -define tiff:endian       Tiff format container endian
       -define tiff:fill-order   Bit order within a byte

    Each takes a value of either MSB (default) or LSB, however
    the "tiff:fill-order" will be set to the value of "tiff:endian"
    if that is defined, but not from the global endian value.

    The "tiff:endian" property is the endianess of the image container. The
    "-endian" property is the endianess of the image pixels. They may differ.


  Save a TIFF file format with only one row pre strip

          -define tiff:rows-per-strip=1.
    To save more rows per stripe increase the number
          -define tiff:rows-per-strip=8
    You can also specify the 'endian' ordering for binary integers in the format
          -endian MSB          -endian LSB

    For smaller TIFF images (other than by compression, you can also try to
    use options and settings like   -depth 8   to reduce the color quality
    or   -alpha off  to remove the alpha or transparency channel from the image.

    IM will save a greyscale image as a greyscale TIFF, if no non-grayscale
    colors are present. You can force it to save as non-greyscale with
          -depth 8  -type TrueColor


  Added IM 6.6.4-3
    Allow you to set the "Software Creation:" meta-data (property)
    to something other than "Image Magick 6.**"
        -set tiff:software "My Software"


  Windows Picture and Fax Viewer, Windows Explorer

    These can can only display TIFFs that have certain Photometric
    Interpretation values, such as RGB.  IM Options...
        -compress LZW -type TrueColor

    toggle the photometric interpretation  (Added IM 6.3.2-10)
        -define quantum:polarity=min-is-black
        -define quantum:polarity=min-is-white


  Multi-Page TIFF
    If you want to split a multi-page tiff into separate pages, IM may have
    problems as it will still use up a lot of memory to hold previous pages
    even if you use a command like...
        magick "a.tif[i]" b%03d.tif

    This might be regarded as a bug, or perhaps a future improvement.

    The better solution may be the non-IM "tiffsplit" program.


  TIFF and EXIF profiles

    Cristy reported: The libtiff delegate library supports the EXIF profile
    but it was unreliable and caused faults too often so we commented out the
    call.

    To get the EXIF attributes try this.

      magick identify -verbose -define tiff:exif=true image.tif

TIFF フォーマットには、"-clip" 演算子を使用して有効にできるクリップパスの形式のビットマップマスクを含めることができます。そのパスを使用して画像を「クリップ」マスクできます。

  magick image_clip.tif  -clip \
          ...do_various_operations... \
          +clip-mask  image_masked.png
詳細については、マスクの書き込みまたはクリップを参照してください。

BMP、Windows ビットマップ

  The Windows desktop icon image format BMP (short for bit-mapped) is a very
  unfriendly image format and should probably be avoided if possible.

  ImageMagick supports 8, 24, and 32-bit BMP images.

  Add -colors 256 to the end your command line (before the output image
  filename) to create a 8 bit colormapped BMP image rather than a 24 bit BMP
  format.  Extra colors can be added to images after performing operations
  like rotates, and resize.  See Color Quantization for more info on -color.

  The presence of any transparency controls whether it uses a 24 (RGB) or 32
  bit (RGBA) format BMP image. You can use "-alpha off" to turn off transparency
  in an image.

  If all colors are gray-scale a 'directcolor' greyscale image is generated.
  I think -type truecolor will stop this behaviour.


  If you have an older program cannot read the default BMP4 images written by
  ImageMagick, (for example a Windows Background Image), you can enforce the
  generation of a BMP3 format image using...

       magick image BMP3:image.bmp

  This format should have no transparency and should be a 'printable image',
  whatever that means.  In other words 'Windows' compatible.

  However, if a PNG input file was used and it contains a gAMA and cHRM chunk
  (gamma and chromaticity information) either of which forces "magick" to
  write a BMP4. To get a BMP3 you need to get rid of that information. One way
  may be to pipeline the image though a minimal 'image data only' image file
  format like PPM and then re-save as BMP3.  Messy, but it should work.

      magick image.png  ppm:- | magick - BMP3:image.bpm

  IM can not produce BMP's at depth levels other than 8.  However you can
  use NetPBM image processing set to do the final conversion to other depth
  levels (This needs at least a Q16 version of IM)...

       magick image -alpha off -colors 16 ppm:- |\
         pnmdepth 4 | ppm2bmp > image.bmp


  Format limitations....

  The header for a BMP2: format only allows the description of the width,
  height and bit depth (bits per pixel) of an image. The bit depth can be one of
  1, 4, 8 or 24.

  For comparison, the bmp3: format allows bit depths of 0, 1, 4, 8 ,16, 24 and
  32 and has extra fields which specify x and y resolution (in pixels per metre)
  and compression of the image data.

ICO

  To create a multi-resolution ICO format image simply create all the image
  sizes you require and write them all to the same ICO file.

    magick icon-16.bmp icon-32.bmp icon-64.bmp \
            icon-128.bmp icon-256.bmp   myicon.ico

  Update

    magick icon-256.png  \
            -define icon:auto-resize="256,128,96,64,48,32,16" \
            myicon.ico

You can now add this to you web pages using
  <LINK REL="shortcut icon" HREF="myicon.ico">

However many web browsers will now accept most image formats, not just the
ICO format.


RAW カメラ画像フォーマット(CRW、CR2、NEF、X3F など)

ほとんどのデジタルカメラは、Sigma Foveonセンサーと一部のソニー製カメラを除き、レンズによって生成された画像を、赤、緑、青の特定の色の明るさを検出する何百万ものセンサーを使ってデジタルデータに変換します。カメラが人間の目とほぼ同じように色に反応するためには、人間の目は緑色の光に対してはるかに敏感であるため、緑色のセンサーは赤色または青色のセンサーの2倍の数があります。センサーは、ベイヤー配列と呼ばれる配置で配置されています。この配置の説明と図については、たとえばデジタルカメラのセンサーの理解をご覧ください。ベイヤー配列からのデータをより一般的なRGBピクセルに変換するには、デモザイキングと呼ばれる処理が必要です。この操作が完了しても、まだ表示する価値のある画像にはなりません。追加の緑色のピクセルがあっても、カメラのセンサーは私たちが知覚する方法で色を認識していません。白い紙を明るい日光の下で見たり、屋内で蛍光灯の下で見たりすると、どちらの条件でも白く見えます。しかし、同じ条件でカメラのデフォルト設定を使用して紙の写真を撮ると、画面に表示したときに紙の色が若干異なります。その理由は、私たちの網膜の裏側は、カメラが紙から反射する光と同じ光を「見る」のですが、私たちの脳はその光を解釈し、紙を白として知覚するからです。カメラは、紙から反射する赤、緑、青の光の量を単純に測定するだけで、蛍光灯の下では日光の下よりも青色の光が多くなるため、その画像の紙は日光の下で撮影した画像よりも青く見えます。白い紙を両方とも表示する画像を生成するには、「ホワイトバランス」と呼ばれる処理、またはグレーバランスまたはカラーバランスを調整する必要があります。ホワイトバランスの詳細については、ホワイトバランスの理解をご覧ください。正しいガンマを設定するなど、RAWファイルにはまだ他の側面がありますが、詳細に説明しなくても、RAWファイルがモニターで見ることができる画像になるには多くの処理が必要であることは明らかです。カメラのRAWファイルは、デジタルネガとも呼ばれます。写真を撮ってカメラにJPG画像を生成させると、デモザイキングやその他の調整がすべて実行されます。しかし、たとえば、写真を撮る前にカメラで正しいホワイトバランスを設定するのを忘れた場合、元の画像に関する多くの情報が失われているため、JPGで状況を修正することはあまりできません。一方、JPGの代わりにカメラからRAWファイルを生成した場合、RAWからの変換中に、特定のホワイトバランス設定と他のパラメーターを選択でき、結果の画像が正しく見えない場合は、設定を元に戻して変更し、正しく見えるまで再度調整することができます。これは、フィルムネガからより多くのプリントを作成する機能に似ています。フィルムネガがなければ、フィルムが最初に現像されたときに得られる4x6スナップショットの1つから8x10の拡大プリントを得ることはできません。ImageMagickはさまざまな異なる形式を処理できますが、RAWカメラファイルをどのように処理するかを「知って」いないため、IMは「dcraw」プログラムをデリゲートプログラムとして使用して、RAWファイルを理解できる形式( '-T' フラグ付きのTIFFまたはPNM)に処理します。これは、たとえばスキャナーからのものではなく、RAWカメラ画像用に設計されていることに注意してください。「dcraw」プログラムは、Canon、Fuji、Kodak、Nikon、Sonyなどのメーカーのカメラからのものを含む、多数の異なるRAW形式を処理できます。「dcraw」がRAWファイルを認識するかどうかは、サンプルを識別させることで確認できます。たとえば、コマンド

  dcraw -i CRW_9641.CRW
は...を返します。
CRW_9641.CRW is a Canon EOS 10D image.
IMが変換を行うためにdcrawを呼び出す際、デリゲート(「-list delegate」を使用してリスト表示)を使用して、画像処理に影響を与える2つのフラグを指定します。
 dcraw -w -4 -O output_file input_file
    
-w」フラグは、RAWファイル内でホワイトバランス情報が見つかれば、dcrawがそれを使用することを意味します。情報が見つからない場合、dcrawは画像全体の平均をホワイトバランスの基準として使用します。「-4」フラグは、dcrawがRAW写真のデモザイキングとホワイトバランスのみを行い、その結果をIMのデフォルトQ16バージョンに適した16ビットの線形画像(ピクセルあたり48ビット)として出力することを意味します。「-w」と「-4」が指定されている唯一の画像処理フラグであるため、dcrawが使用するデフォルトがいくつかあります。出力カラースペースはsRGBになり、ICCプロファイリングは実行されません(私のシステムでは、dcrawはLCMSライブラリなしでコンパイルされているため、プロファイリングを実行できません)。「-4」フラグが設定されているという事実は、レベル調整やガンマ補正など、多くの処理ステップが省略されていることを意味するため、結果の画像は暗く見えるでしょう。その意図は、ユーザーが「Photoshop」や「Paint Shop Pro」、さらには「ImageMagick」などの画像エディターで画像を処理し、レベル、ガンマなどの調整を自分で実行することです。この場合、画像は1色あたり16ビットをサポートする形式(例:TIFF)に出力する必要があります。注意:dcrawが16ビットファイルを生成するからといって、16ビットすべてに有用なデータが含まれているわけではありません。たとえば、Canon 10Dデジタル一眼レフカメラからのRAW画像は、1色あたり10ビットです。Canonおよび他のメーカーの最近のカメラは、1色あたり14ビットです。RAW写真を完全に変換したい場合は、「-4」フラグを削除して、dcrawがデモザイキング、ホワイトバランス、明るさとガンマ補正などを行うようにする必要があります。この場合、dcrawは8ビットファイル(ピクセルあたり24ビット)を出力します。この画像のさらなる処理を行う場合は、PNGとして出力し、JPEG圧縮によるアーティファクトを避けるのが最善です。JPEG形式は、実際の使用の最終ステップとしてのみ使用する必要があります。実際、画像処理の中間ステップには、常にPNG(またはIM内部形式MIFF)などのロスレス形式を使用することをお勧めします。特別なDCRawデリゲートを追加すると、「RAW」カメラ画像形式の読み取り方法を制御できます。詳細については、DCRaw Webサイトと、dcrawのオプションのフラグの多くに関する情報と、さまざまなフラグを使用したRAW画像のヒストグラムを含むDCRawチュートリアルWebサイトをご覧ください。また、DCRawの例も参照してください。上記のメモは、まずIMフォーラムのトピックRAW画像の変換からjhfryによって抽出され、el_supremoによって大幅に書き直されました。

MPEG、M2V、AVIムービー

  IM is not very efficient at creating movies.  It will do the job though
  requires the external program "mpeg2encode" to do much of the dirty work.

  The problem is that IM is not designed to handle video, but static images or
  small sequences of images.  That is, not to say it can't do it, but that is
  not its goal.  In particular it generally reads in all images into memory
  and process them from there.  For a large or long video this is not very
  efficient.

  For processing on a small sequence of frames however it really can't be
  beat.  In fact just about every Linux Video manipulation program uses
  ImageMagick to generate titles, fancy scene changes, and other effects to
  complete the post-processing development of a larger video development.  The
  process however is kept to small video sequences.

  However lets have a look at what IM can do.

  Frames to Video

  There are some reports that unless the images are the right aspect ratio is
  correct this will fail on older mpeg players,  use the MPEG II extension
  (m2v:) instead.

  Also use m2v to avoid heavy compression pixelization that can occur
  using...

      magick *.jpg glacier.mpg

  EG instead use...

      magick *.jpg m2v:glacier.mpg

  Note you may need lots of temporary space to do a large animations
  You can specify a different directory from the normal /tmp using...

      setenv MAGICK_TMPDIR /data
      magick -limit memory 0 -limit map 0 *.jpg image.m2v

Alternatives...

  To converting PNG images to MPEG2 Video streams, instead of MNG Multi
  PNG-files, use the following delegation...

       png2yuv -j file%08d.png -I p -f 25 -b 1 | \
         mpeg2enc -f 3 -q 3 -b 5000 -o out.m2v

  For more info see mjpeg.sf.net


  IM forums reported decent results with an open source project called "ffmpeg", which seems to be a fairly standard
  linux package install.

     ffmpeg -f image2 -i %03d.jpg -vcodec mjpeg -y anim.mpg

  Extracting an MVG with a transparent background
      magick -background none -size 320x240 sample.mvg out.png


  Michael Lenh wrote...
  I finally was able to create a very sexy video using mplayer

    mencoder "mf://data/p*.png" -mf fps=40 -o particle.avi -ovc lavc

  You can see the results at...

    http://www.mathematik.uni-ulm.de/~lehn/particle.avi
    http://www.mathematik.uni-ulm.de/~lehn/temperature.avi


  mabu in a IM Forum Discussion said to
  "USE MENCODER, wow it's like 1000 times faster and actually WORKS"...

     mencoder -nosound mf://*.jpg -mf w=800:h=371:type=jpg:fps=15 -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=2160000:mbd=2:keyint=132:v4mv:vqmin=3:lumi_mask=0.07:dark_mask=0.2:mpeg_quant:scplx_mask=0.1:tcplx_mask=0.1:naq -o output.mpg

  It probably has extra options I don't need but it makes a nice time-lapse
  from .jpg files.


  Dean S. Messing uses transcode...

     find . -type f -name '*.png' | sort > filelist
     transcode -x imlist,null\
            --use_rgb\
            -y raw,null\
            -f 60\
            -i filelist\
            -g 4096x2160 \
            -j 540,1024,540,1024\
            -o video.avi\
            -H 0

   You can leave out -j  (clip window) if you want. -g is output size.

   Wolfgang Hugemann suggests a new alternative known as 'VirtualDub' under
   Windows Vista, which will let you run a video, or magick directly from
   a folder of image frames.

   WARNING: "mplayer" apparentally does not like mpeg file with
   only one frame. "ffplay" however seems to have no problems.


   Video to Frames

   Both "mplayer" and
   "mencode" are more efficient at converting video into a series
   of frames than IM is.  On top of this is can handle just about any video
   (and audio) codec available.

   For example to grab 5 frames from 1 1/2 minutes into a video, scaled to
   320x240, you can use...

      mplayer file.mov -vf scale=320x240 -ss 01:30 -ao null \
              -vo png:z=3 -frames 5

   Other alternatives include the "ffmpeg" open source library, though that is also part of the
   "mplayer" handling.


MNG、マルチプルイメージネットワークグラフィックス

Barry LooMNGアニメーションの例の議論から寄稿しました。MNG(ミングと発音)は、PNGに基づいたオープン形式で、GIFなどのアニメーションビットマップの代替手段を提供します。透明度(半透明と完全な両方)、圧縮(可逆と非可逆の両方)、最大32ビットの色深度が可能です。色深度の増加こそが、この形式を他の形式と真に区別するものです。GIFは合計256色までしかサポートしていないため、多くのグラフィックには問題ありませんが、写真やグラデーションは影響を受けます。GIFアニメーションの作成に使用できるアニメーションオプションのほとんどは、MNGの作成にも使用できます。

magick -size 101x101 radial-gradient: \
        \( -clone 0 -level 00,100% +level-colors ,#F00 \) \
        \( -clone 0 -level 10,100% +level-colors ,#F12 \) \
        \( -clone 0 -level 20,100% +level-colors ,#F24 \) \
        \( -clone 0 -level 30,100% +level-colors ,#F36 \) \
        \( -clone 0 -level 40,100% +level-colors ,#F46 \) \
        -delete 0  -duplicate 1,-2-1 -set delay 1x30 -loop 0 pulsing.mng
[IM Output]
上記のコマンドは、放射状グラデーション画像を生成し、それを複製および調整して、赤からより明るい赤オレンジのパルスを作成します。次に、これを複製して、逆のパトロールサイクルを作成してから、30秒のループMNGアニメーションを作成します。残念ながら、ほとんどのWebブラウザーは現在MNGをサポートしておらず、多くのビデオプレーヤーはループアニメーションの1回だけを表示します。上記の欠落している画像フレームをクリックすると、アニメーションをダウンロードし、IMのアニメーションコマンドを使用して表示できます。MNG形式の詳細については、MNG Webサイトをご覧ください。

DPX、デジタルピクチャーエクスチェンジ形式

このフォーマットは、映画や映像効果業界で利用されており、広範囲なヘッダー情報と、RGBまたはYCbCrピクセル記述を使用して、さまざまなビット深度でハイダイナミックレンジと対数カラー値を扱える柔軟性を特に活用しています。このフォーマットは、よりフィルム固有のヘッダーを持つコダックのCineonフォーマットをベースとしていますが、ほぼ完全に取って代わっています。その使用例としては、ポストプロダクションで使用するためにフィルムをスキャンする場合が挙げられます。各フレームは、2K(幅2048ピクセル)から8K(幅8192ピクセル - IMAXフレームの場合)の範囲で、色成分あたり8ビットから64ビットの間で個別の.dpxファイルとして保存されます。これらのシーケンスは、合成ソフトウェアを使用して処理され、色を変更したり、視覚効果を追加したりすることができます。完了すると、デジタルでテープに記録したり、フィルムに投影して戻したりすることができます。各ピクセルのカラー値は、多くの場合、対数的に保存されます(特に、シーケンスをフィルムに転送して戻す場合)。これは、元のフィルムの乳剤にカラー情報が保存される密度をより自然に反映しています。対数ファイルは、変更せずに表示するとコントラストが非常に低く見えるため、対数画像を、フィルムに転送して映画館で投影した場合に見えるものに似たものに変換するための「ルックアップテーブル」が必要です。このテーブルは、画像を(ほとんどの一般的なコンピュータ画像のように)線形にするだけでなく、ガンマレベルを調整することで、黒点と白点の位置を設定します。各色成分の値が0から1023の範囲である10ビット対数画像の場合、黒点と白点は通常、黒が95、白が685に設定されます。これは、対数ファイルが、線形バージョンで純粋な白として表示されるよりも明るく、純粋な黒として表示されるよりも暗いカラー値を保存することを意味します。したがって、この追加情報は、dpxファイルとして保存した後、画像の明るさを変更したい効果アーティストが利用できます。例として、この情報が失われた場合、画像の明るさを均一に下げると、ハイライトが暗くなりますが、この追加情報を使用すると、ハイライトは代わりにサイズが小さくなり、以前は明るすぎて見えなかった詳細が表示され始めます。後者の方が現実世界で起こることにずっと近いものです。ヘッダーには、制作に関連するフィルムおよび/またはテレビ固有のデータを含めることができます。たとえば、テレビのヘッダーにはSMPTEタイムコードを含めることができるため、制作の編集からdpxシーケンスとしてエクスポートされたショットは、エフェクトが追加された後、簡単に置き換えることができます。フィルムヘッダーには、フレームが由来するフィルムリールと、撮影中に使用されたさまざまなカメラ設定に関する情報が含まれています。これらの詳細はすべて、ポストプロダクション会社間で画像が受け渡される際に、画像とともに保持されます。

DPXファイルにタイムコードを追加する

以下の手順で、任意のdpxファイルにタイムコードを追加できます

  magick -define dpx:television.time.code=10000215 \
          originalFile.00001.dpx    alteredFile.00001.dpx
映画やアニメーションからの一連の数千のファイルに対してこのコマンドを実行するには、明らかに非常に時間がかかります。シンプルなスクリプトをImageMagickで使用すると、シーケンス内の各フレームのタイムコードを自動的にインクリメントできます。たとえば、Perlスクリプトdpx_timecode.plを参照してください。
上記のコピーは、映画フォーマットの概要のメインIMドキュメントに追加されました。上記は、DPXフォーマットに関する長いIMフォーラムディスカッションから、Seth Dubieniec <seth.info_AT_dubieniec.co.uk>のご厚意によるものです。彼は現在DPXアプリケーションを開発中であり、より多くのDPX情報が提供される予定です。
Extra Notes (unformatted)...

Adding  -depth 10  causes IM to output a  10 bit DPX file.
-- James Fancher


If you want to set the gamma, for example, in the output DPX image...
     -define dpx:television.gamma=1.7

The colorspace of the DPX image is defined by the image element descriptor and
transfer-characteristic. If the transfer characteristic is
PrintingDensityColorimetric we set the colorspace to LogColorspace. Only if
the colorspace is Log do we apply the gamma and black/white points to convert
to the RGB colorspace. Its possible the program you are using is not
conforming to the SMPTE standard or ImageMagick is not interpreting the
standard correctly. Post an URL to your two DPX images and we will download and
try to determine if ImageMagick has a bug or if the program you are using is
buggy.

The following will work with ImageMagick 6.3.8-3

  magick -colorspace log AfterEffectsFile.dpx -set gamma 0.5 \
          -set reference-black 95 -set reference-white 685 image.jpg

Alternatively, take a look at the SMTPE documentation
-- Cristy


You can add text user data to the dpx file by using

  magick image.dpx   -set dpx:userdata "some text"    new.dpx

-- Cristy


PSD

PSD画像ファイルは、Photoshopの作業用画像ファイル形式であり、XCFがGIMPの作業用ファイル形式であるのと同じように、MIFFはImageMagick独自の作業用ファイル形式です。通常、マルチイメージが含まれており、最初の画像は現在の作業画像のオールインワンのマージです。これにより、現在の作業画像の状態を確認するのに役立ち、「サムネイル化」によく使用されます。マルチイメージファイル形式の他のすべての画像は、最初の結合画像を生成するために使用される画像です。つまり、ユーザーが保存時に作業していた個々の作業レイヤー画像です。したがって、単に「最終」画像だけが必要な場合は、入力ファイル名に「 '[0]' 」を追加して作業用画像を破棄し、オールインワンの最初の画像のみを使用することをお勧めします。ただし、個々のレイヤー画像を操作する場合は、「 '[1--1]' 」を使用して最初の画像をスキップしてください。追加のレイヤー画像が見つからない場合は、代わりに最初の画像が返されます。「-delete 0」を使用することはお勧めしません。最初の画像にレイヤー画像が続かない場合、画像がまったく返されないためです。追加のメモ... この形式でIMを使用することに関する追加情報を提供したり、概要を送信したりする場合は、ぜひお願いいたします...
   For PSD with a CMYK image you may need to get IM to use the
   right provide when converting (make sure you IM was installed with the LCMS
   delegate library) ....

     magick Test_CMYK.psd -strip -profile USWebCoatedSWOP.icc \
             -profile sRGB.icc Test_RGB.png

   See Profiles above for more info.


   If a PSD image contain a 'preview' image.  This image is returned as the
   last image of a two image read.

   To ensure IM never reads the last image use...
       magick test.psd[0--2] -flatten test.jpg
   That is, read all images, except the last. But always read the first.
   This can not be done after the read using a "-delete".

WMF

Microsoft Officeプログラムセットで使用されるスケーラブルなクリップアートによく使用される別のベクター形式です。入力は、画像を読み取る前に「-density」を変更してスケーリングできます。ベクター画像フォーマットも参照してください。

Flashアニメーション(SWF)

現在、FlashアニメーションはIMでサポートされていません。しかし、完全を期すために、Scott BicknellSWF Toolユーティリティ「swfextract」は、Flashアニメーションからjpegまたはpngフレームを抽出できると報告しています。Wolfgang Hugemannは、Windowsフリーウェアツール「IrfanView」も同様のことができると考えています。これは、適切なデリゲート候補のように思えます。

画像へのWebページ変換(HTML)

IMがHTMLをロードする場合、htmlをpostscriptにマジック変換するhtml2psを探し、それを画像としてレンダリングします。これはあまりうまく機能しませんが、機能はします。フルWebブラウザーを使用する方が、タスクを最適な方法で実行するように設計されているため、はるかに優れた方法です。ブラウザーを使用する最も簡単な方法は、ブラウザーでページをロードし、そのスクリーンショットを撮ることです。これにより、ページの完璧な画像が得られますが、ブラウザーのウィンドウサイズに制限されます。別のバリエーションとして、IMにマジック変換させるのではなく、ブラウザーにページをpostscriptとして出力させる方法があります。これにより、Webサイトを小さなページにうまく分割する必要があります。LINUXでは、Webサイト全体を表示するのに十分な大きさのブラウザーを実行できる仮想Xウィンドウディスプレイサーバーを開始できます。これは非常に高いディスプレイになる可能性があります。次に、ブラウザーをその中で実行し、ディスプレイ全体を埋めるように設定します。Webサイトがロードされ、再びスクリーンショットを取得します。この複雑なプロセス全体を自動化できるスクリプトを見たことがあります。ただし、非常に長い画像になる可能性があります。また、ディスプレイをどの程度大きくする必要があるかを知るのも困難です。基本的には簡単ではなく、最良のソリューションでは、最終的な画像処理にのみIMを使用し、HTMLから画像への生成には使用しません。

PCL印刷フォーマット

IM PCLはデフォルトでバージョン6 PCLです。バージョン5の場合は、画像を白黒にマジック変換する必要があります。たとえば...

  magick image.png -monochrome image.pcl

コダックPhotoCDまたはProPhotoCD(PCD)

コダックPhotoCDファイルは、マルチ解像度画像ファイル形式です。つまり、各ファイルには、同じ画像が6つの異なるサイズで含まれており、「ピラミッド画像」として知られているものを形成しています。ファイル内の最初の画像は最も解像度が低く(サイズが最も小さい)、最後の画像は最も解像度が高く(3072×2048ピクセルで最も大きい)なります。ユーザーは通常、処理するために最大の解像度の画像を必要とするため、PCD画像をJPGなどの他の形式にマジック変換するには、画像ファイルから6番目(インデックス5)を取得します。たとえば...

  magick -colorspace RGB image.pcd[5] image.jpg
色を正しく取得するには、「-colorspace RGB」オプションが必要です。情報は、Magick-UsersメーリングリストのWolfgang Hugemann <ImageMagick_AT_Hugemann.de>のご厚意によるものです。

Raw RGBおよびグレースケールデータ

ImageMagickには、生の画像データを扱うためのいくつかのファイル形式、特に「RGB:」と「GRAY:」があります。また、そのデータを定義する設定も提供します。たとえば、RGB生データを出力するには...

  magick image.jpg -depth 8  image.rgb
-depth」設定は、書き込まれる(および後で読み込まれる)整数のサイズを指定します。この場合、RGBの場合、ピクセルあたり3バイトの8ビット値(24ビット画像)です。生の画像データを扱う場合は、適切な深度を指定することを常にお勧めします。「-depth」が16ビットの場合、値あたり2バイトが生成されます。この場合、「-endian」またはバイト順序を、「MSB」(最上位バイトが最初)または「LSB」(最下位バイトが最初、デフォルト)として指定する必要がある場合もあります。rgbは純粋に画像データであり、画像の幅と高ささえ含まれていないことに注意してください!一部のアプリケーションは、データが特定のサイズであると「想定」しているため、IMを使用してデータがこのサイズであることを確認する必要がある場合があります。たとえば、次の例では、画像をリサイズしてパディングし、サイズが512x512ピクセルになるようにします。

  magick image.jpg -resize \>512x512 \
          -background black -gravity center -extent 512x512 \
          -depth 8  image.rgb
ImageMagickに生のRGB(またはグレースケール)データを読み込む場合は、画像のサイズを指定する必要があります。たとえば...

  magick -size 512x512 -depth 8 image.rgb    image.png
これにより、ImageMagickが読み込むデータ量が正確に定義されます。生のデータには、追加のヘッダー情報が添付されている場合があります。IMでこの情報をスキップできるようにするには、「-size」設定で「byte_offset」を指定できます。たとえば、48バイトのヘッダーをスキップするには...

  magick -size 512x512+48 -depth 8 image.rgb    image.png
これは、IMが「-size」設定で3番目の数値を使用する場合の唯一の例です。生の画像データ(グレースケール)の使用例の詳細については、IMディスカッションフォーラムトピック生の画像を圧縮されたtifに変換する方法を参照してください。

浮動小数点データ

You can also read (and write) RGB using normalized floating point numbers.
This however requires the use of special coder -define settings.
See HDRI floating point file formats
   https://imagemagick.dokyumento.jp/Usage/basics/#hdri_formats


RGB floating point Image generated using C Code (HDRI)...

   float red = 1.0f;
   float green = 1.0f;   /* appropriate data */
   float blue = 1.0f;

   /* for exach pixel in image... */
   fwrite (&red, sizeof(float), 1, file);
   fwrite (&green, sizeof(float), 1, file);
   fwrite (&blue, sizeof(float), 1, file);

Reading Options....

  magick -size 200x100 -depth 32 -define quantum:format=floating-point
          -define quantum:scale=65536.0   -endian lsb   input.rgb
          output.png

The quantum:format defines to read floating point numbers from the file.
While the -depth defines the floating point size (32 = floats, 64 = doubles).

The quantum:scale  defines how to scale the floating point numbers from
normalized 0.0 to 1.0 values to the in-memory 16bit Quality levels needed
by my Q16 version of IM.