用php计算图像大小的百分比
我有一段代码,它在上传照片的右下角添加了水印。然而,水印不会像我希望的那样根据上传的照片改变大小。我想按百分比计算它的比例,所以水印总是上传照片的10%,并放在右下角。如何做到这一点 这是我的代码:用php计算图像大小的百分比,php,image,Php,Image,我有一段代码,它在上传照片的右下角添加了水印。然而,水印不会像我希望的那样根据上传的照片改变大小。我想按百分比计算它的比例,所以水印总是上传照片的10%,并放在右下角。如何做到这一点 这是我的代码: // Load the stamp and the photo to apply the watermark to $stamp = imagecreatefromgif('../images/watermark.gif'); $marge_right = 5; $marge_bottom = 5
// Load the stamp and the photo to apply the watermark to
$stamp = imagecreatefromgif('../images/watermark.gif');
$marge_right = 5;
$marge_bottom = 5;
$sx = imagesx($stamp);
$sy = imagesy($stamp);
$im = imagecreatefromjpeg($file_tmp)
imagecopymerge($im, $stamp, imagesx($im) - $sx - $marge_right,
imagesy($im) - $sy - $marge_bottom, 0, 0, imagesx($stamp), imagesy($stamp), 30);
如果您使用的是PHP 5.5+,请按如下方式操作:
// Load the stamp and the photo to apply the watermark to
$stamp = imagecreatefromgif('../images/watermark.gif');
$im = imagecreatefromjpeg($file_tmp);
$marge_right = 5;
$marge_bottom = 5;
$percent = 10;
$factor = 1 - ($percent/100);
$stampscaled = imagescale ($stamp, $factor * $imagesx($im));
$sx = imagesx($stampscaled);
$sy = imagesy($stampscaled);
imagecopymerge($im, $stamp, imagesx($im) - $marge_right - $sx,
imagesy($im) - $marge_bottom - $sy, 0, 0, $factor * imagesx($im), $factor * imagesy($im), 30);
注意:这将适用于大小大致为矩形的源图像。对于极端的纵横比,您可能需要使用更复杂的缩放。对于PHP5.5之前的版本,但至少是PHP4,您可以这样缩放图像:
function scale($image, $percentage)
{
$w = imagesx($image) * $percentage;
$h = imagesy($image) * $percentage;
$newimage = imagecreatetruecolor($w, $h);
imagecopyresized($newimage, $image, 0, 0, 0, 0, $w, $h,
imagesx($image), imagesy($image));
return $newimage;
}
$scaledImage = scale($originalImage, 0.5); // scale by 50%
找到尺寸,然后使用这些尺寸缩放水印dimensions@zahrec我刚刚添加了一个(晚了7个月)的答案来说明如何使用5.5以上的PHP进行缩放。这不会缩放图像,而是根据百分比将其移动到右下角…@Zahrec抱歉,我误解了
imagecopymerge
函数的参数。请尝试上面的版本。嗨。谢谢你的帮助。我在运行代码时遇到以下错误:致命错误:在线调用/xxx/xxx.php中未定义的函数imagescale()475@Zahrec很抱歉,这仅适用于PHP5.5以后的版本。