Imagick
インスタンスを呼び出したときにインスタンスがどの次元になるかをすばやく確認する方法は何Imagick::thumbnailImage($w, $h)
ですか?
3 に答える
おそらくこのようなもの...
# 3:2 format
$w = 120; # desired width
$h = 80; # desired height
$r = 640 / 480; # current width / height 4:3 format
if ($w / $h < $r)
$w = $h * $r;
else
$h = $w / $r;
echo $w, $h; # 120x90 4:3 format
寸法(現在のw&h、希望のw&h、およびimagickによって生成されたもの)を指定すると、より役立ちます。
Imagick::thumbnailImage($w, $h)
100%の精度ですべての可能な状況を処理する次元を見つけるためのアルゴリズムを見つけることができませんでした。(たとえば、$w
または$h
である場合0
など)そこで、私はこの関数を作成しました:
function thumbSize($pic, $thumbW, $thumbH) {
//make a white image of the same size
$picsize = $pic->getImageGeometry();
$whitepic=new Imagick();
$whitepic->newImage($picsize['width'], $picsize['height'], "white");
$whitepic->thumbnailImage($thumbW, $thumbH);
return $whitepic->getImageGeometry();
}
残念ながら、機能させるには画像のサイズを変更する必要があります。アルゴリズムベースのソリューションよりも何倍も遅くなります。しかし、それは機能します。
他の誰かがより良い答えを持っているなら、私は代わりにそれをチェックします。
おそらく、幅または高さのいずれかの寸法は、サムネイル呼び出しで要求された寸法とまったく同じになります。thumbW/widthとthumbH/heightの比率を比較することで、どちらを使用するかを決定できます。2つのうち小さい方が使用されます。サムネイルの寸法は、名目上、幅*比率と高さ*比率です。残っているのは整数に変換することだけで、選択肢は切り上げ、切り下げ、そして最も近いものに丸められます。Imagickがどれを使用しているかはわかりませんが、どれが一致するかを実験して確認するのは難しいことではありません。
また、両方の比率が1未満の場合、つまり元の画像が要求されたサムネイルサイズよりも小さい場合、どうなるかわかりません。簡単な実験でもそれを明らかにする必要があります。
自分で実験を行わなかったことをお詫びしますが、PHPは私のレパートリーに含まれていません。