Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 缩放水印以适合父图像_Php_Image Processing_Image Resizing_Watermark - Fatal编程技术网

Php 缩放水印以适合父图像

Php 缩放水印以适合父图像,php,image-processing,image-resizing,watermark,Php,Image Processing,Image Resizing,Watermark,我的照片大小各不相同,它们是横向、纵向或方形,我需要使水印最适合每张照片-因此我需要调整水印的宽度(不带Imagick),因为它是一个长矩形,所以高度不重要 我找到了PHP函数,imagecopyresized,但老实说,即使在看过PHP文档之后,我也无法确定我的情况需要哪些参数!我也不确定在使用imagecopyresized后,我的函数的其余部分是否可以在获取水印宽度和高度的位置工作 谁能帮我越过终点线吗。这就是我所做的,它所需要的只是将正确的参数添加到imagecopyresized部分:

我的照片大小各不相同,它们是横向、纵向或方形,我需要使水印最适合每张照片-因此我需要调整水印的宽度(不带Imagick),因为它是一个长矩形,所以高度不重要

我找到了PHP函数,
imagecopyresized
,但老实说,即使在看过PHP文档之后,我也无法确定我的情况需要哪些参数!我也不确定在使用imagecopyresized后,我的函数的其余部分是否可以在获取水印宽度和高度的位置工作

谁能帮我越过终点线吗。这就是我所做的,它所需要的只是将正确的参数添加到
imagecopyresized
部分:

<?php

header('content-type: image/jpeg');

$image = imagecreatefromjpeg('https://.....jpg');
$imageSize = getimagesize('https://.....jpg');

$newWatermarkWidth = $imageSize[0]-50; // width of image minus 50px
$watermark = imagecreatefrompng('watermark.png');

// resize watermark to newWatermarkWidth here with imagecopyresize
$watermark = imagecopyresized(?,?,?,?);

$watermark_width = imagesx($watermark);
$watermark_height = imagesy($watermark);

$dest_x = ($imageSize[0]/2) - ($watermark_width/2) ;
$dest_y = ($imageSize[1]/2) - ($watermark_height/2);

imagecopy($image, $watermark, round($dest_x,0), round($dest_y,0), 0, 0, $watermark_width, $watermark_height);
imagejpeg($image);
imagedestroy($image);
imagedestroy($watermark);

?>


这就是我的结尾&效果完美

调整水印宽度以适应整个父图像的脚本,居中且成比例

<?php
header('content-type: image/jpeg');

$image = imagecreatefromjpeg('http://mydomain.com/myPhoto.jpg');
$imageSize = getimagesize('http://mydomain.com/myPhoto.jpg');

$watermark = imagecreatefrompng('http://mydomain.com/myWatermark.png');

$watermark_o_width = imagesx($watermark);
$watermark_o_height = imagesy($watermark);

$newWatermarkWidth = $imageSize[0]-20;
$newWatermarkHeight = $watermark_o_height * $newWatermarkWidth / $watermark_o_width;

imagecopyresized($image, $watermark, $imageSize[0]/2 - $newWatermarkWidth/2, $imageSize[1]/2 - $newWatermarkHeight/2, 0, 0, $newWatermarkWidth, $newWatermarkHeight, imagesx($watermark), imagesy($watermark));

imagejpeg($image);

imagedestroy($image);
imagedestroy($watermark);

这将调整水印大小并直接复制到图像

您不再需要现有的imagecopy行

$success = imagecopyresized($image,                 // Destination image
           $watermark,                              // Source image
           $imageSize[0]/2 - $newWatermarkWidth/2,  // Destination X
           $imageSize[1]/2 - imagesy($watermark)/2, // Destination Y
           0,                                       // Source X
           0,                                       // Source Y
           $newWatermarkWidth,                      // Destination W
           imagesy($watermark),                     // Destination H
           imagesx($watermark),                     // Source W
           imagesy($watermark));                    // Source H

非常感谢你,伊坦。然而,这是可行的,水印的高度缩放得不是很好。它似乎拉长了水印的宽度,但留下了一点高度,这导致水印的位置略高于中心位置。有什么想法吗?修复了垂直定位错误(目的地Y是错误的。在那里使用$imageSize[1])啊。对不起,我不是那个意思。我想按比例调整它的大小。我的意思是水印的高度很小,因此我不需要将其设置为特定的高度,因为照片总是更大。好的,Y定位非常完美,谢谢编辑。我仍然需要找出如何保持水印高度的比例。我设法计算出新的比例水印高度,并按预期工作。再次感谢。