0

このクラスを使用しようとしています: http://www.verot.net/php_class_upload_samples.htm

画像のサイズ変更と残りの部分の塗りつぶしに慣れている人がいれば、助けてください。

アイデアは、600x600 の画像をアップロードする場合、1-600x600 と 1-300x300 の 2 つの画像を保存することです。これまでのところ、うまく機能しています。ただし、ユーザーがサイズ 749x1202 の画像をアップロードすることを選択した場合、スクリプトで 300x300 と 600x600 で見栄えを良くし、無駄なスペースが白で塗りつぶされているため、画像は 600x600 のままです。249x400 などの小さな画像でも同じことが起こります。

これまでの私のコードは次のとおりです。

// Set the upload directory
$uploadDir = '../../htdocs/public/product_images/'.$id.'/';
$thumbDir = '../../htdocs/public/product_images/'.$id.'/thumbs/';

@mkdir($uploadDir, 0755, true);
@mkdir($thumbDir, 0755, true);


// Store the file content in a variable
$file = file_get_contents('php://input');

// Save the file to the server
file_put_contents($uploadDir . $filename, $file);

$targetFile =  str_replace('//','/',$uploadDir) . $filename;
$targetThumb = str_replace('//','/',$thumbDir) . $filename;
copy ($targetFile,$targetThumb);


$image = new upload($targetFile);
if ($image->uploaded) {
    $image->image_resize          = true;
    $image->image_ratio_fill      = true;
    $image->image_x               = 600;
    $image->image_y               = 600;
    $image->file_overwrite        = true;
    $image->process($uploadDir);
} 

$image = new upload($targetThumb);
if ($image->uploaded) {
    $image->image_resize          = true;
    $image->image_ratio_fill      = true;
    $image->image_x               = 300;
    $image->image_y               = 300;
    $image->file_overwrite        = true;
    $image->process($thumbDir);
}

別の方法を使用することもできますが、誰かが私を少し説明してくれれば、とても感謝しています.

4

1 に答える 1

0

できることは、アスペクト比を維持したまま画像を拡大縮小することです。これにより、少なくとも1つの寸法が要件に一致し(つまり、128x300になります)、空の画像(キャンバス)を作成し、これら2つを組み合わせて画像をキャンバスの中央に配置します。しかし、私は単にこの128x300 pxの画像をディスクに書き留め、HTML / CSSで300x300pxのコンテナサイズを適用します-これはファイルが小さく、CSSを変更するだけでキャンバスのbgカラーを簡単に変更できるのでより良いです-以前の手法では、bgが透過的でない場合はそれほど簡単ではありません(透過的である場合は、とにかくHTMLを使用しないのはなぜですか)。

于 2012-11-22T13:43:52.397 に答える