2011-05-18 19 views
2

画像のサイズを変更する必要がある新しい高さと幅が必要です。二つの条件画像のアスペクト比に基づいたサイズ変更

  1. 幅は約180ピクセル(170〜180)にする必要があるが、< 180ピクセル(アップロードされた画像は常に> 180である)
  2. 高さは最大180ピクセルでなければなりません(アップロードされた画像は、してもしなくてもよいかもしれ> 180があります。 )
+0

OK、何か試しましたか?あなたはどこにいるのですか? – deceze

+0

あなたはimagecopyresize PHPを試してみましたか?私はその機能を使用し、またimagecopyreassemble。 –

+0

私はちょうど新しい高さと幅が必要私はそれを達成することができる多くの機能を知っているが、私はそれを渡す必要があることを高さと幅に留意 – aWebDeveloper

答えて

0

Linux用のプログラムを作成している場合は、ImageMagickの使用をお勧めします。それはより多くのメモリ効率的で、おそらくどんなPHPベースの方法よりも高速です。ほぼすべてのサーバーにインストールされています。次のコードはそのトリックを行います。

function resizeTo($source, $dest, $w=180, $h=180) { 
    system("convert $source -resize {$w}x{$h} $dest"); 
} 

アスペクト比が気になります。

編集:混乱のため

申し訳ありません。私はあなたが探していることを次のようにするべきだと思います。それはテストされていないし、少しデバッグが必要な場合があります。

あなたはわずか数歩の必要
//accepts and returns point object (having ->x and ->y) 
function resizeTo($current, $max) { 
    if($current->x <= $max->x && $current->y <= $max->y) //you will not need this but 
     return $current;         // still its good to have 

    if(($current->y/$max->y) > ($current->x/$max->x)) { //y axis needs more trimming 
     $r=$current->y/$max->y; 
     $current->y = $max->y; 
     $current->x = $current->x/$r; 
    } else { 
     $r=$current->x/$max->x; 
     $current->x = $max->x; 
     $current->y = $current->y/$r; 
    } 

    return $current; 
} 
+0

私の状態は正確に縦横比ではなく、PHPは画像magik関数に組み込まれている – aWebDeveloper

+0

@ウェブ開発者:画像magick関数を組み込んだことのおかげで、あなたの問題は何ですか?質問から、イメージのサイズを変更する必要はないようです。または、サイズを変更せずに新しいサイズを使用したいだけですか? –

+0

はい私はあなたのコードのPHP版ですここでサイズ変更に興味がありますhttp://www.php.net/manual/en/function.imagick-thumbnailimage.php – aWebDeveloper

0

:最初のものは、あなたが(それは180、常に大きいことをあなたのコメントに基づいて)幅180を作るために必要なスケールファクタを設定します

1. scale = imageWidth/180; 
2. scale = (imageHeight/scale>180) ? imageHeight/180 : scale; 

もう1人は、高さがそのスケールで180より大きくなるかどうかを確認します。そうであれば、スケールは高さ/ 180になります。そうでなければ、あなたはすでに最大の高さを持っています。あなたは、私が画像をトリミングすることも可能だと思います170と180の間imageWidthを作りたい考慮

width = imageWidth/scale; 
height = imageHeight/scale; 

その後、あなたはまた、実際の幅と高さを取得するための手順を必要としています。その場合は追加チェックが必要です

if (width<170) { 
    width = 170; 
    height = imageHeigh/(imageWidth/170); 
    //resize image to width and height 
    //crop image to height = 180 
} 
関連する問題