アップロード時にユーザーがアップロードした画像を縮小しようとしています。
これは問題ありませんが、サイズを具体的に説明したいと思います。
あらゆる形状の画像(あらゆる幅/高さの正方形または長方形)を取り、それを縮小するアルゴリズムの作成に苦労していることについて、いくつかのアドバイスを探しています。
この画像は、ターゲットボックスサイズに縮小する必要があります(これは変更されますが、変数に格納されます)。
したがって、アスペクト比を維持しながら、幅と高さの両方がターゲットの幅と高さよりも大きくなるように画像を縮小する必要があります。 。ただし、ただ..
ターゲットサイズは画像のトリミングに使用されるため、エッジなどの周りに空白はありません。
さまざまな寸法の画像に基づいて正しいサイズ変更を作成する背後にあるアルゴリズムだけを探しています-トリミングを処理でき、ほとんどの場合はサイズ変更もできますが、いくつか失敗するため、連絡を取ります。
私は実際にはPHPコードをもっと疑似的に求めているわけではありません。どちらも明らかに問題ありません。
親切に感謝します。
現在のコード..しかし、私は非常に多くの反復を経験しましたが、これはもうまったく機能しない可能性があります..:P
$image = $image_orig->clone();
$wRatio = $imageprops['width'] / $dimensions[0]; // imageprops = original image dimens.
$hRatio = $imageprops['height'] / $dimensions[1]; // $dimensions[0] = new width
$maxRatio = max($wRatio,$hRatio); // $dimensions[1] = new height
var_dump('thumb');
$ratio = ($imageprops['width'] - $dimensions[0]) > ($imageprops['height'] - $dimensions[1]);
$shape = ($imageprops['width'] > $imageprops['height']);
$error = ($imageprops['width'] / $imageprops['height']);
if( $error < 0.95 || $error > 1.05 ) { // its NOT a square
if($shape){ // longer width
$scale = $imageprops['height'] / $dimensions[0];
var_dump('1');
$height = $imageprops['height'] / $scale;
$image->scaleImage(0, $height);
} else {
$scale = $imageprops['width'] / $dimensions[1];
var_dump('2');
$width = $imageprops['width'] / $scale;
$image->scaleImage($width, 0);
}
} elseif($ratio) { // is square
$scale = $imageprops['height'] / $dimensions[1];
$newWidth = $imageprops['width'] / $scale;
$extra = 0;
$height = $dimensions[1]+$extra;
$image->scaleImage(0, $height);
} else {
$scale = $imageprops['width'] / $dimensions[0];
$newHeight = $imageprops['height'] / $scale;
$extra = 0;
$width = $dimensions[0]+$extra;
$image->scaleImage($width, 0);
}
$image_size = $image->getImageGeometry();
$image->cropImage($dimensions[0], $dimensions[1],($image_size['width']-$dimensions[0])/2,($image_size['height']-$dimensions[1])/2);