PHP imagecreatetruecolour中心图像

时间:2011-12-12 09:35:12

标签: php

我试图将图像居中到

的中间位置
$thumbnail_gd_image = imagecreatetruecolor(600, 300);

命令。如果用户上传的图像是100x50,我会生成一个更大的版本到600x300,背景为白色。现在,实际图像放在左上角。我希望这张图片位于600x300生成图像的中间。

另一方面,如果用户上传的图像大于600x300,那么我会调整大小以保持这些参数。

我正在构建一个图像上传/裁剪工具,但是可裁剪区域的宽度始终是它的两倍,所以我需要可用的裁剪区域在600x300以内进行任何详细的裁剪。

可以这样做吗?中心的小于600x300的图像?

由于

编辑:

尝试下面的代码,但它不喜欢它。

这是我的代码(可能不是最干净的,但需要快速半工作)。

if($source_image_width < 600 && $source_image_height < 300){
    $x = (600 / 2) - ($source_image_width / 2);
    $y = (300 / 2) - ($source_image_height / 2);
}else if($source_image_width > 600){
    $x = 0;
    if($source_image_height < 300){
        $y = (300 / 2) - ($source_image_height / 2);
    }else{
        $y = 0; 
    }
}else if($source_image_height > 300){
    if($source_image_width < 600){
        $x = (600 / 2) - ($source_image_width / 2);
    }else{
        $x = 0;
    }
    $y = 0;
}else{
    $x = 0;
    $y = 0;
}

以上代码将400宽x 800高的图像略微放在中心左侧(约100px)。任何图像上的高度都可以完美地工作,但不是宽度。

1 个答案:

答案 0 :(得分:2)

你可以尝试:

$W = 600;
$H = 300;

$im = imagecreatefromjpeg($filename);
list($w,$h) = getimagesize($filename);
$x = ($W / 2) - ($w/2);
$y = ($H / 2) - ($h/2);

$newIm = imagecreatetruecolor($new_w, $new_h);
// i know I could have used a better function for this, but...
imagecopyresampled($newIm, $im, $x, $y, 0, 0, $w, $h, $w, $h);

header("Content-type: image/jpeg");
imagejpeg($thumb);

我没有时间去测试它(对不起)但它应该可以工作,如果没有,请告诉我,我会调试它。

编辑1:

对于大图像,您必须从中裁剪。你所要做的就是

$W = 600;
$H = 300;

$im = imagecreatefromjpeg($filename);
list($w,$h) = getimagesize($filename);
$x = ($W / 2) - ($w/2);
$y = ($H / 2) - ($h/2);

$x = sqrt($x * $x);
$y = sqrt($y * $y);

$newIm = imagecreatetruecolor($new_w, $new_h);
// i know I could have used a better function for this, but...
imagecopyresampled($newIm, $im, $W > $w ? $x : 0, $W > $w ? $y : 0, $W > $w ? 0 : $x, $W > $w ? 0 : $y, $w, $h, $w, $h);

header("Content-type: image/jpeg");
imagejpeg($thumb);

尝试一下,让我知道结果。再一次,我没有测试它,它可能会以史诗般的方式失败。