問題タブ [perlmagick]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
image - Image::Magick (perlmagick) 縦横比のサイズ変更と品質の問題 (convert コマンド ライン ユーティリティとは異なります)
ImageMagick と perlmagick (Image::Magick) を使用して、画像の一括サイズ変更操作を実行しようとしています。ソースとして持っている画像はすべて大きな画像であり、さまざまな間隔または高さまたは幅のいずれかにサイズを変更したいと考えています。常に縦横比を維持したい。
3840 ピクセル × 2160 ピクセル (3840x2160) のサイズのサンプル画像が与えられた場合、次のサイズ変更された画像を作成したいと考えています。
これは、 convertコマンド ライン ユーティリティと次のコマンド (順番)を使用して、非常に簡単に行うことができます。
これらの操作を他の操作と組み合わせて一括で実行しようとしているので、Image::Magickを使用して perl で同じ操作を実行しようとしています。いくつかの異なる方法を試しましたが、次の結果が得られました。
これにより、縦横比が維持されない画像が生成されます。たとえば、高さ 100 が指定された場合、出力イメージは元の幅の 100 倍 (3840x100) になります。幅を指定すると、同等の効果が得られます。高さは維持されますが、縦横比は維持されません。
これにより、縦横比を維持する画像が得られ、ジオメトリ操作が高さに基づいている場合、出力はまさに意図したものになります。ただし、幅が指定されている場合、出力はひどくぼやけています。
これにより、イメージはすべて正しいものになりますが、perl プロセスの外側で fork が発生し、効率の問題が発生します。
このサイズ変更操作がコマンドライン変換ユーティリティと同じ結果を生成するようにするための perl のより良い方法はありますか?
私のコマンド ライン ユーティリティはバージョン 6.7.9-10 を報告し、Image::Magick はバージョン 6.79 を報告します。
perl - Image::Magick ぼやけた円を描く
背景画像があります。(この例ではmesh.png
)
画像には、境界線がぼやけた円を 1 つ追加する必要があります。現在これを持っています:
これにより、次の画像が生成されます。
しかし、次のように「エッジがぼやけた」円が必要です(手動で作成)
Image::Magickでそのようなぼやけた円を取得する方法を誰かが助けることができますか?
が必要な場合mesh.png
は、次のスクリプトで作成されます。
perl - Image::Magick を使用して画像を小さなチャンクに分割し、各チャンクの相対位置を取得する
大きな (最大 16384x16384px) 画像を小さなチャンク (通常は 512x512) に分割する必要があります。これを行うために、以下の単純な perl スクリプトを使用しています。
ここで、たとえば 1024x1024 のソース画像の場合、元の画像の位置オフセットを含む小さな断片のインデックスを作成する必要があります。
...または似たようなもの。基本的には、特定の各チャンクが元の画像にあった位置を追跡するだけです。
convert
コマンドが渡されたので、system()
ファイルのグロブを実行してそれらをソートすることを考えていました。いくつかの簡単な実験では、小さなチャンクが左から右、上から下の順序で (直感的に) 番号付けされ、に基づいてインデックスを構築することが示されています。それは、しかし、ImageMagick への perl 独自のインターフェイスを含む、もっと単純なものがあるに違いないと私は考えています
だから私の質問は次のとおりです。
1.Image::Magick
に相当するものは何convert $ARGV[0] -crop $size $newfile" . "_%03d.png
ですか?
2. system() 呼び出しを回避できたら、$image オブジェクトのデータに基づいてインデックスを作成することはできますか?
PS:
- チャンク サイズは頻繁に変更されません。512 のハードコーディングは問題ないので、それを抽出する必要はあり
$size
ません ... 実際、なぜその変数を選択したのかまったくわかりません。 - 元の画像サイズは常にチャンク サイズで割り切れるので、残り物について心配する必要はありません。
- glob() のアプローチを難しくするために、画像は常に正方形であるとは限りません。おそらく、
identify
コマンドの 3 列目を使用することを考慮に入れることができますか?
image - 画像に透明なピクセルがあるかどうかを判断する方法
画像に透明なピクセルがあるかどうかを判断するために使用されるコードを見つけました。
明らかに、これは機能しません。開いているアイコンライブラリの画像 user-desktop.png で透明ピクセルを入れてみました。チェックは -1 を返しました。
このコマンドが使用された理由を推測することしかできません。GD のマンページには次のように書かれています。
パラメータなしでこのメソッド [transparent] を呼び出すと、透明色の現在のインデックスが返されます。ない場合は -1 が返されます。
副次的な質問として、透明ピクセルにはカラー インデックスがまったくない可能性があります。
次に、スレッドPerl GD check if pixel is transparentを見つけました。しかし、このソリューションでは、画像のすべてのピクセルを反復処理する必要があります (少なくとも、透明なピクセルだけが最後のピクセルになる場合)。
この情報を確認する簡単な方法はありませんか? 多分 $image_object->has_transparent_pixels のようなメソッドですか?
注意: 私は GD に縛られていないので、他の画像モジュールも同様に機能する可能性があります (ただし、私は Windows を使用しています - そこでは機能するはずです)。
image - 画像を固定幅にスケーリングしますが、縦横比は保持しません
結果の画像の幅が固定されるように画像を拡大縮小したいのですが、画像の高さは同じままです。これはどのように行うことができますか?
perl - ImageMagick コマンドライン オプションの順序 (およびコマンドライン パラメータのカテゴリ)
私のスーパーバイザーは、PerlMagick を使用する Perl スクリプトの部分を変換して、代わりに ImageMagick のコマンド ライン バージョンをパイプして使用するように依頼しました (さまざまな無関係な理由から)。
既存のインターフェイス (クロップ、スケーリング、保存など) を使用して、ユーザーが画像に対して実行したい操作のリストを作成し、パイプするステートメントを作成して実行します。
私が知りたいのは:
- 変換操作は左から右に実行されますか? つまり、私がそれらを渡す順序
- 同じオプションを 2 回渡すとどうなりますか? それらは別々に実行されますか?
明らかに、画像に対して操作を実行する順序は非常に重要なので、すべての操作を一度に実行できるか (おそらく効率が上がるでしょうか?)、それとも実行する必要があるかを考えています。各操作は個別に。ありがとう