我的imagecopymerge函数在PHP中发生了一些非常奇怪的事情。我试图将这两个png文件合并在另一个上面,并且这些合并的位置是从html页面中的可拖动画布动态获取的。通过邮寄表格,我提交了' x'并且' y'坐标我希望目标图像上的合并发生(根据PHP Man。$dst_x
和$dst_y
参数)到我的php文件。
当我尝试在实际调用函数时动态设置这两个参数时,生成的图像会正确地转储到浏览器中但是当我尝试右键单击另存为...时,在保存的图像上,源代码(合并)图像($src_img
)从(0,0)坐标开始,而不是我指定的(或者更确切地说,用户)。如果我尝试将其保存为整个网页(Ctrl + S或文件...保存),则会正确保存(即$src_image
从指定的x
和y
开始坐标)。
但是,如果我硬编码某些x和y坐标,这不会发生,我可以通过每种方法保存它(拖放到桌面,文件...保存...等)在浏览器中,它正确且一致地保存。
这是我的代码:
<?php
if(isset($_POST)){
// Create image instances
$src = imagecreatefrompng('hello.png');
$dest = imagecreatefrompng('./img/image2.png');
imagealphablending($dest, true);
imagesavealpha($dest, true);
// Copy and merge
$posX = (int)(isset($_POST['x']) ? $_POST['x'] : null);
$posY = (int)(isset($_POST['y']) ? $_POST['y'] : null);
imagecopymerge($dest, $src, $posX, $posY, 0, 0, 200, 200, 100); //dynamic setting
header("Content-Disposition: inline; filename=\"rendered.png\"");
header('Content-Type: image/png');
// Output and free from memory
imagepng($dest);
imagedestroy($src);
imagedestroy($dest);
}
?>
我不确定为什么Firefox会这样做,但我感谢任何帮助。
答案 0 :(得分:0)
如果有人遇到同样的问题,我通过更改HTML表单上的提交方法解决了这个问题。而不是发布,我使用了get,它起作用了。不确定它为什么会这样做,或者为什么它会使实际值产生任何差异,但是嘿,它有效。
更新:
想出真正导致问题的原因。 From the PHP.net in the imagepng() function man:
如果您根据发布数据动态生成图像并且不想将其保存到服务器,则发送它以显示可能会导致问题,因为当用户尝试保存它时,浏览器会再次请求它从服务器(导致任何帖子数据丢失,可能是一个损坏的png)。
解决此问题的最简单方法是使用内容处置标头强制下载,例如:
<?php
header('Content-Disposition: Attachment;filename=image.png');
header('Content-type: image/png');
?>