質問

シナリオ

いの画像の保存とアルファードの透明 .png 画像無しアルファードの透明 .jpg (けられているだけでなく元のファイルフォーマットでは .png または .gif).できるかを検出しの有無にかかわらず、画像のアルファ透明性をImageMagick?

役に立ちましたか?

解決

ImageMagikにコマンドます:

identify -format '%[channels]' foo.png 
アルファチャンネルが存在するかどう

は、それぞれ、rgba又はrgbを印刷します。

があり、実際に任意の透明性を持っているが、それはもう少し複雑ではないことでデータのないアルファチャンネルが存在することができます。

他のヒント

を確認することができますが、画像が実際に透明...コンテキストメニューなどからアルファチャンネルが未使用)

このコマンド:

convert some_pic.png -verbose info:

(あい : 末のコマンド)

あべ.そのチャンネルリスト:

(...)
Channel depth:
  red: 16-bit
  green: 16-bit
  blue: 16-bit
Channel statistics:
(...)

この例では、チャネルは、各主要カラーです。した。この画像は透明。

が使用できる必要がありますこのような出力:

(...)
Channel depth:
  red: 16-bit
  green: 16-bit
  blue: 16-bit
  alpha: 1-bit
Channel statistics:
(...)

こちらはアルファチャンネルしかし、このものではありませんであることを立証する画像は透明。って見積書や請求書を発行するsaasで ます。の出力のコマンドに関する情報アルファチャンネル:

(...)
  Alpha:
    min: 255 (1)
    max: 255 (1)
    mean: 255 (1)
    standard deviation: 0 (0)
    kurtosis: 0
    skewness: 0
(...)

この例では、アルファのような写真は不透明: min = max =1(1=不透明であるものの、0=。その場合でも、画像のアルファチャネルにおいては、ユーザは不透明。

こともできます:

(...)
  Alpha:
    min: 95 (0.372549)
    max: 212 (0.831373)
    mean: 111.187 (0.436028)
    standard deviation: 19.5635 (0.0767196)
    kurtosis: 7.52139
    skewness: -2.80445
(...)

この時に、 min =0.372549.これは一部のピクセルの一部に透過的です。 mean も低い。この大部分画像を用透明性を有する。

によってタイプのチェックインを実現したい(完全不透明度"で不透明"など)、 を確認しておきましょう min, meanstandard deviation お申し込みいただいた場合はは、ややトリッキーな機能である.

注意:うに誘惑されることを確認の整数値 min, mean その他、私た。しかし、もはや対応 95 以上 0.372549.を選択するこのルートは、注意のアルファチャンネル。の場合は8ビットの、その後-255の範囲で最大限の意味は"不透明".の場合は16ビット単位の最大値は65535 255手段と"ほとんど透明".より良いチェックの山括弧は常に範囲が0-1.

疑いがある場合は、多くの写真でございますので、ご留意のないアルファチャンネルで容易にできることを最初に実行します:

identify -format '%[channels]' some_pic.png

場の堆積場:

rgba

あるアルファチャネルの a 出力) convert 要チェックに使用され min, など。だがないということである必要があり convert.なかったのが、世の中には、ベンチマーキングこれら二つのコマンド identify 必要なコストはきわめて不確実であ convert.

画像はアルファチャンネル

を持っているかどうかを確認

を使用する、の-format %A serhiy.hの回答のよう。

ドキュメントするから
  

%のA画像透明度チャネルが有効(真/偽の)

画像がまったく透明または半透明のピクセルを持っていない場合は、

チェック

使用-format %[opaque] のの

ドキュメントするから
  

%[不透明]計算値:?画像は完全に不透明

<時間>

は実証するために、アルファチャンネルを有するが、完全に不透明である画像a.pngを作成することができ、一つの半透明ピクセルを除いて同じである画像b.png

$ convert rose: PNG32:a.png
$ convert rose: -fill '#0008' -draw "matte 10,10 point" PNG32:b.png

はASが予想される、%Aエスケープは、両方のアルファチャンネルを持っているので、両方の画像についてTrueを生成します

$ identify -format '%A' a.png
True
$ identify -format '%A' b.png  
True

%[opaque]エスケープがある場合にtrueを生成し、一方の透明画素に他の原因でfalse一方

$ identify -format '%[opaque]' a.png
true
$ identify -format '%[opaque]' b.png
false

identify -format %A some_pic.png
画像にアルファチャンネルが含まれている場合は、

Trueを返します。

あなたはアルファ透明度が実際に使用されていることを確認したい場合は、私はそれは透明だかどうかは確認するために、色情報をすべてのピクセルを反復して取得するために参照する唯一のソリューション。大きな画像については、これは非常に遅いので、最適化としてあなたが最初(のは20×20を言わせて)画像のサムネイルを作ることができることが、その後、サムネイルのピクセルをチェックします。これは私にとって良い解決策だった。

ここでのImageMagickを使用して、PNGは透明性を持っているかいないかどうかを確認するには、bashの機能のカップルは、です。

簡易チェック、存在のためだけにチェックアルファチャンネルの

checkAlphaFast() {
    test $(identify -format %A "$1") == True
}

遅いチェック、検証画素自体(アルファチャンネルが存在する場合でも):

checkAlphaSlow() {
    test $(identify -format '%[opaque]' "$1") == false
}
それはかなり速いいずれかの方法だからです。あなただけの、あなたが全体の多くにこれをやっている場合は、高速チェックを使用して検討すべきです。私はこれらの関数を作ったから答えた他の人のおかげで、:)

ボーナスとして:私はすべてのベンチマークをしなかったが、これは、ほぼ同じ速、高速モードなどと低速モードとして正確ようなものであってもよい。

checkAlpha() {
    checkAlphaFast "$1" && checkAlphaSlow "$1"
}

このように、これらの機能を使用します:

if checkAlpha "$myPNG"; then
    # is transparent
else
    # is opaque
fi
<時間> そして、これはあなたに0が完全に透明で、1は完全に不透明である画像の不透明性を与えるます:

checkOpaqueness() {
    if checkAlphaFast "$1"; then
        convert "$1" -verbose info: | grep -A3 Alpha: | tail +4 | head -n1 | sed -r 's/.*\(|\)//g'
    else
        echo 1
    fi
}
丸みを帯びた割合として

そして、この1つの出力、整数はbashのためにそんなにより自然であるためます:

checkPercentage() {
    printf %3.2f $(checkOpaqueness "$1") | tr -d . | sed -r 's/^0?0?//'
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top