画像記述子とは、画像の基となるデータと、その表示方法を指定するリストのことです。通常、display オーバーレイやテキストプロパティの値として使用されます(その他の表示仕様を参照)。ただし、バッファに画像を挿入するための便利なヘルパー関数については、画像の表示を参照してください。
各画像記述子は (image . props)
という形式をとり、ここで props
はキーワード記号と値が交互に並ぶプロパティリストであり、画像タイプを指定するペア :type type が少なくとも含まれている。
画像の寸法を定義する画像記述子 :width、:height、:max-width、および :max-height には、ピクセル単位の寸法を表す整数、または value が ems 単位の寸法長となるペア (value . em) のいずれかを指定できます36。1 em
はフォントサイズに相当し、value には整数または浮動小数点数を指定できます。また、寸法は (value . ch) および (value . cw) の形式で指定することもでき、ここで
ch は正準文字の高さを、cw
は正準文字の幅を表します。
以下は、すべての画像タイプにおいて意味を持つプロパティの一覧です(後述のサブセクションで説明するように、特定の画像タイプにおいてのみ意味を持つプロパティもあります):
:type type画像タイプ。画像フォーマットを参照してください。すべての画像記述子には、このプロパティを含める必要があります。
:file fileこれは、ファイル file から画像を読み込むよう指定しています。file が絶対ファイル名でない場合は、image-load-path で指定された各ディレクトリを基準として展開されます(画像の定義を参照)。
:data dataこれは生の画像データを指定します。各画像記述子は、:data または :file のいずれか一方を持つ必要があり、両方を持つことはできません。
ほとんどの画像タイプでは、:data
プロパティの値は画像データを含む文字列である必要があります。一部の画像タイプでは :data
がサポートされておらず、また別のタイプでは :data だけでは不十分なため、:data と併せて他の画像プロパティを使用する必要があります。詳細は以下のサブセクションを参照してください。
:margin marginこれは、画像の周囲に追加の余白として何ピクセル加えるかを指定します。値 margin
は、非負の数値、またはそのような数値のペア (x . y) である必要があります。ペアの場合、x
は水平方向に加えるピクセル数を、y は垂直方向に加えるピクセル数を指定します。:margin が指定されていない場合、デフォルトは 0 となります。
:ascent ascentこれは、画像の高さのうち、上昇分(つまりベースラインより上の部分)に使用する量を指定します。値 ascent は、0から100までの数値、または記号 center である必要があります。
ascent が数値の場合、画像の高さのその割合が上昇量として用いられます。
ascent が center
である場合、画像は、画像に適用されるテキストプロパティおよびオーバーレイで指定された方法で、画像の位置に描画されたテキストの垂直中心線を中心線として、その垂直方向に中央配置されます。
このプロパティを省略した場合、デフォルト値は 50 となります。
:relief reliefこれにより、画像の周囲に影の矩形が追加されます。値 relief は、影の線の幅をピクセル単位で指定します。relief が負の場合、画像が押されたボタンのように見えるように影が描画され、そうでない場合は、押されていないボタンのように見えます。
:width width, :height height:width および :height
キーワードは、画像のスケーリングに使用されます。いずれか一方のみを指定した場合、アスペクト比を維持するようにもう一方が算出されます。両方を指定した場合、アスペクト比が維持されないことがあります。
:max-width max-width, :max-height
max-height:max-width と :max-height
のキーワードは、画像のサイズがこれらの値を超える場合のスケーリングに使用されます。:width
が設定されている場合は max-width より優先され、:height が設定されている場合は max-height
より優先されますが、それ以外の場合はこれらのキーワードを自由に組み合わせて使用できます。
:max-width と :height
の両方が指定され、:width が指定されていない場合、アスペクト比を維持するためには、幅が
:max-width
を超える必要があるかもしれません。その場合、スケーリングではアスペクト比を維持しつつ :max-width を超えないよう、高さに小さい値が使用されます。同様に、:max-height と :width
の両方が指定され、:height が指定されていない場合も同様です。例えば、200x100
の画像があり、:width を 400、:max-height を 150 と指定した場合、結果として 300x150
の画像になります。これにより、アスペクト比を維持しつつ、「max」設定を超えないようになります。このパラメータの組み合わせは、「この画像を可能な限り大きく表示するが、利用可能な表示領域を超えないようにする」という意図を伝えるのに有用な方法です。
:scale scaleこれは画像の拡大縮小係数となる数値です。1より大きい値は画像サイズを大きくし、小さい値はサイズを小さくすることを意味し、画像の幅と高さの両方にこの係数を乗じます。例えば、値を0.25にすると、画像は元の4分の1のサイズになります。拡大縮小によって画像が:max-widthまたは:max-heightで指定されたサイズよりも大きくなった場合、最終的なサイズはこれら2つの値を超えません。:scaleと:height/:widthの両方が指定されている場合は、高さ/幅が指定された拡大縮小係数によって調整されます。
scale の値にはシンボル default
を指定することもでき、これは image-scaling-factor
の値を使用することを意味します。その値が数値である場合は、それを使用する拡大縮小係数となります。auto(デフォルト)の場合は、フレームのデフォルトフェイスで使用されるフォントのピクセルサイズに基づいて拡大縮小係数を計算することを意味します(低レベルフォント表現を参照)。具体的には、デフォルトフェイスのフォントのピクセル幅が
10 より大きい場合、画像はフォント幅と 10 の比として計算される係数で拡大されます。フォント幅が 10
ピクセル以下の場合は、画像は拡大縮小されません。例えば、デフォルトフォントの幅が 15 の場合、画像は 1.5 倍に拡大されます。
scale が指定されていない場合、create-image は image-scaling-factor の値に応じて画像をスケーリングします。
:rotation angle回転角度を度単位で指定します。画像タイプが imagemagick
でない限り、90度の倍数のみが指定可能です。正の値は時計回りに、負の値は反時計回りに回転します。回転は、スケーリングおよびクロップ処理の後に行われます。
:flip flipこれが t の場合、画像は水平方向に反転します。現在、画像タイプが imagemagick
の場合は効果がありません。垂直方向の反転は、画像を180度回転させ、この値を切り替えることで実現できます。
:transform-smoothing smoothこれが t の場合はあらゆる画像変換にスムージングが適用され、nil
の場合はスムージングが適用されません。使用される具体的なアルゴリズムはプラットフォームに依存しますが、バイリニアフィルタリングと同等であるはずです。スムージングを無効にすると、最近傍アルゴリズムが使用されます。
このプロパティが指定されていない場合、create-image はユーザーオプション image-transform-smoothing
を用いて、平滑化を行うか否かを決定します。このオプションには、nil(平滑化なし)、t(平滑化あり)、または画像オブジェクトを唯一の引数として呼び出され、nil または t
のいずれかを返す述語関数を指定できます。デフォルトでは、ダウンスケーリング時には平滑化が適用され、大規模なアップスケーリング時には平滑化が適用されません。
:index frameマルチフレーム画像を参照してください。
:conversion algorithmこれは、画像を表示する前に適用すべき変換アルゴリズムを指定するもので、値 algorithm でどのアルゴリズムを指定するかを指定します。
laplaceembossラプラスエッジ検出アルゴリズムを指定します。これにより、色のわずかな差異はぼかしつつ、大きな差異を強調します。障害のあるボタンの画像表示に有用とされる場合があります。
(edge-detection :matrix matrix
:color-adjust adjust) ¶一般的なエッジ検出アルゴリズムを指定します。matrixは、9要素のリストまたは9要素の数値ベクトルである必要があります。変換後の画像における位置x/yの画素は、その位置周辺の元の画素から算出されます。matrixは、x/yの近傍にある各画素について、その画素が変換後の画素に及ぼす影響係数を指定します。以下に示すように、要素0はx-1/y-1の画素の係数を、要素1はx/y-1の画素の係数を、というように指定します。
(x-1/y-1 x/y-1 x+1/y-1 x-1/y x/y x+1/y x-1/y+1 x/y+1 x+1/y+1)
得られるピクセルは、周囲のピクセルのRGB値を合計して得られる色の色強度に、指定された係数を乗じ、その合計を係数の絶対値の総和で除算することで算出されます。
ラプラスエッジ検出では現在、行列を用いて
(1 0 0 0 0 0 0 0 -1)
エンボスエッジ検出では、行列を用いて
( 2 -1 0
-1 0 1
0 1 -2)
disabled画像を無効化されたように表示するよう変換することを指定します。
:mask maskmask が heuristic または (heuristic bg)
の場合、画像にクリッピングマスクを作成し、画像の背後にフレームの背景が見えるようにします。bg
が指定されていない場合、または bg が t
の場合、画像の四隅を確認し、最も頻繁に出現する色を画像の背景色として決定します。それ以外の場合、bg
は画像の背景として想定する色を指定するリスト (red green blue) である必要があります。
mask が nil
である場合、画像にマスクがあればそれを削除します。一部のフォーマットの画像にはマスクが含まれており、:mask
nil を指定することで削除できます。
:pointer shapeこれは、マウスポインタがこの画像上にあるときのポインタ形状を指定します。利用可能なポインタ形状については、ポインタ形状を参照してください。
:map map ¶これにより、この画像にホットスポットのイメージマップが関連付けられます。
イメージマップとは、各要素が (area id plist)
という形式を持つリストのことです。area は、矩形、円、または多角形のいずれかとして指定されます。
矩形とは、矩形領域の左上隅と右下隅のピクセル座標を指定する cons (rect . ((x0 . y0) . (x1 . y1))) のことです。
円とは、円の中心と半径を指定する cons (circle . ((x0 . y0) . r)) であり、r は浮動小数点数または整数となります。
多角形とは、ベクトル内の各ペアが多角形の頂点を1つずつ表す cons (poly . [x0 y0 x1
y1 ...]) のことです。
マウスポインタが画像のホットスポット領域上にある場合、そのホットスポットの plist
が参照されます。そこに help-echo
プロパティが含まれていればホットスポットのツールチップが定義され、pointer
プロパティが含まれていれば、ホットスポット上にあるときのマウスカーソルの形状が定義されます。利用可能なポインタ形状については、ポインタ形状 を参照してください。
マウスポインタがホットスポット上にあるときにマウスをクリックすると、ホットスポットのidとマウスイベントが組み合わされてイベントが生成されます。例えば、ホットスポットのidがarea4であれば、[area4 mouse-1]となります。
なお、マップの座標は、すべての変換(回転、拡大縮小など)が適用された後の表示画像を反映している必要がある点にご注意ください。また、Emacsは(デフォルトで)画像の自動拡大縮小を行うため、整合性を取るには、画像作成時に
:scale 1.0 を指定するか、image-compute-scaling-factor の結果を用いてマップの要素を算出する必要があります。
画像の:scale、:rotation、または:flipが変更されると、:original-mapの値とそれらの変換値に基づいて:mapが再計算されます。
:original-map
original-map ¶これは、画像の:scale、:rotation、または:flipが変更された後に:mapを再計算するために使用される、変換前のイメージマップを指定します。
create-image で画像を作成する際に :original-map が指定されていない場合は、指定された :map に加え、nil 以外の :scale、:rotation、または :flip のいずれかに基づいて算出されます。
逆に、:original-map が指定されていて :map が指定されていない場合、:map は :original-map、:scale、:rotation、:flip に基づいて計算されます。
このユーザーオプションを nil に設定すると、Emacs が :original-map
に基づいて画像 :map を自動的に再計算するのを防ぐことができます。
この関数は、画像 spec にマスクビットマップがある場合に t を返します。frame
は画像が表示されるフレームです。frame、nil
を指定するか省略した場合は、選択されたフレームを使用することになります(入力フォーカス を参照)。
この関数は、frame が画像の拡大縮小および回転に対応している場合、non-nil を返します。frame、nil の指定または省略は、選択されたフレームを使用することを意味します(Input Focus
を参照)。返されるリストには、どの画像変換操作がサポートされているかを示す記号が含まれています:
scale画像のスケーリングは、frame の :scale、:width、:height、:max-width、および :max-height プロパティを通じてサポートされています。
rotate90回転角度が90度の整数倍である場合、frame で画像の回転がサポートされます。
画像変換がサポートされていない場合、:rotation、:crop、:width、:height、:scale、:max-width、および:max-heightは、ImageMagickが利用可能な場合に限り、ImageMagickを通じてのみ使用可能です(ImageMagick Imagesを参照)。
タイポグラフィにおいて、emとは文字の高さに相当する距離のことです。例えば、12ポイントの書体を使用する場合、1emは12ポイントに相当します。これを用いることで、距離と文字の大きさの比率が保たれます。