我试图将图像居中到
的中间位置$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)。任何图像上的高度都可以完美地工作,但不是宽度。
答案 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);
尝试一下,让我知道结果。再一次,我没有测试它,它可能会以史诗般的方式失败。