2012-04-19 11 views

答えて

0

Imagick::thumbnailImage($w, $h)が与える可能性のあるすべての状況を100%正確に処理するディメンションを見つけるアルゴリズムが見つかりませんでした。 (例えば$w又は$h0、等である場合)だから、私はこの機能からなる:

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(); 
} 

残念ながら、それが動作するように画像のサイズを変更しなければならないと、アルゴリズムベースのソリューションよりも何倍も遅くなります。しかし、それは動作します。

他の誰かがより良い回答をしている場合は、代わりにそれをチェックします。

+1

イメージを「グレー」の形式で作成すると、少し高速化することができます。 –

1

おそらくこのような何か...

# 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を希望&時間wの現在、そしてImagickが製造されたもの)を与えた場合、それは、より参考になります。

0

おそらく、幅または高さのいずれかの次元は、サムネイル呼び出しで求められる次元と正確に同じです。 thumbW/widthとthumbH/heightの比率を比較することでどれを決定できますか、どちらか小さい方が使用されます。サムネイルの寸法は、名目上の幅*比率と高さ*比率です。左にあるのは整数に変換することだけで、選択肢は切り上げられ、切り捨てられ、最も近いものに丸められます。私はImagickがどちらを使用しているのかわかりませんが、どれが一致するかを実験して調べるのは難しいことではありません。

両方の比率が1未満の場合、つまり元の画像が要求されたサムネイルサイズよりも小さい場合、どうなるかもわかりません。簡単な実験でもそのことを明らかにする必要があります。

申し訳ありませんが、自分自身で実験を行っていませんが、PHPは私のレパートリーにありません。