通过填充调整图像大小

时间:2012-11-22 13:29:56

标签: php image-processing

我正在尝试使用此课程:http://www.verot.net/php_class_upload_samples.htm

如果有人熟悉调整大小和填充图像的其余部分,请帮助我。

我的想法是,如果您上传600x600的图片,我想保存两张图片:1-600x600和1-300x300。到目前为止,它运作良好。但是,如果用户选择上传大小为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);
}

我可以用另一种方式做这件事,但如果有人能指点我,我将非常感激。

1 个答案:

答案 0 :(得分:0)

您可以做的是在保持纵横比的情况下缩放图像,因此至少有一个尺寸符合您的要求(即您获得128x300)然后创建空图像(画布)并合并这两个图像在画布上居中。但我只是将这个128x300像素图像写在磁盘上并在HTML / CSS中强制执行300x300像素的容器大小 - 这更好,因为你的文件更小,你可以通过改变你的CSS轻松改变画布的bg颜色 - 以前的技术,如果bg不透明就不会那么容易(如果是,那么为什么不使用HTML呢?)