我正在尝试同时创建缩略图和调整图像大小,所以在这里要更清楚的是我正在尝试裁剪的图像:
我想删掉那个红色区域。
现在我的问题是我在裁剪之前用html调整我的图像大小,所以当我向php提交数据时我得到的值不正确,例如y = 100
当真的可能是y = 200
所以我需要找到一种计算我的价值观的方法。
我正在使用imagecopyresampled
,也许这个命令有更好的东西?
我最亲近的解决方法是:
imagecopyresampled(
$thumb, //Destination image link resource.
$src, //Source image link resource.
0, //x-coordinate of destination point.
0, //y-coordinate of destination point.
0, //x-coordinate of source point.
0, //y-coordinate of source point.
120, //Destination width.
160, //Destination height.
$image_width/2, //Source width.
$image_height/2 //Source height.
);
在这种情况下,它会切出左角,但尺寸与我的红色框不一样。
所以我想我需要让source width
和source height
正确,其他一切都应该完美,无论如何我希望我在这里有任何意义:))
编辑抱歉,我忘了提及,$image_width
和$image_height
是原始图片尺寸
编辑2 更清楚这是我使用此代码调整大小时所得到的
$dimensions = getimagesize('testas.jpg');
$img = imagecreatetruecolor(120, 160);
$src = imagecreatefromjpeg('testas.jpg');
imagecopyresampled($img, $src, 0, 0, 0, 0, 120, 160, $dimensions[0]/2, $dimensions[1]/2);
imagejpeg($img, 'test.jpg');
调整后的图片大小是正确的,但是你看起来不正确。
答案 0 :(得分:1)
我使用这样的东西来缩放图像:
public static function scaleProportional($img_w,$img_h,$max=50)
{
$w = 0;
$h = 0;
$img_w > $img_h ? $w = $img_w / $img_h : $w = 1;
$img_h > $img_w ? $h = $img_h / $img_w : $h = 1;
$ws = $w > $h ? $ws = ($w / $w) * $max : $ws = (1 / $h) * $max;
$hs = $h > $w ? $hs = ($h / $h) * $max : $hs = (1 / $w) * $max;
return array(
'width'=>$ws,
'height'=>$hs
);
}
用法:
$getScale = Common::scaleProportional($prevWidth,$prevHeight,$scaleArray[$i][1]);
$targ_w = $getScale['width'];
$targ_h = $getScale['height'];
$jpeg_quality = 100;
$src = $prevdest;
$img_r = imagecreatefromjpeg($src);
$dst_r = ImageCreateTrueColor( $targ_w, $targ_h );
//imagecopyresampled(dest_img,src_img,dst_x,dst_y,src_x,src_y,dst_w,dst_h,src_w,src_h);
imagecopyresampled($dst_r,$img_r,0,0,0,0,$targ_w,$targ_h,$prevWidth,$prevHeight);
imagejpeg($dst_r, 'assets/images/'.$scaleArray[$i][0].'/'.$filename, $jpeg_quality);
$complete[] = $scaleArray[$i][0];
答案 1 :(得分:0)
当您说'使用HTML调整大小'时,您是指使用width
元素的height
和img
属性指定大小吗?如果是这样,这不会影响服务器上文件的尺寸,您仍然可以使用getimagesize
获取文件的尺寸。
这样的东西会返回图像的源宽度和高度:
function get_source_size($the_file_path)
{
$imagesize = getimagesize($the_file_path);
return array('width' => $imagesize[0], 'height' => $imagesize[1]);
}
答案 2 :(得分:0)
所以经过一段时间我能够在我的朋友的帮助下完成,这是我使用的脚本,也许将来会有人需要它:)
private function crop($user, $post){
//get original image size
$dimensions = getimagesize($post['image_src']);
//get crop box dimensions
$width = $post['w'] * ($dimensions[0] / $post['img_width']);
$height = $post['h'] * ($dimensions[1] / $post['img_height']);
//get crop box offset
$y = $post['y'] * ($dimensions[1] / $post['img_height']);
$x = $post['x'] * ($dimensions[0] / $post['img_width']);
//create image 120x160
$img = imagecreatetruecolor(120, 160);
$src = imagecreatefromjpeg($post['image_src']);
imagecopyresampled($img, $src, 0, 0, $x, $y, 120, 160, $width, $height);
//and save the image
return imagejpeg($img, 'uploads/avatars/'.$user->id.'/small/'.$post['image_name'].".jpg" , 100);
}