PHP从base64_decode裁剪图像

时间:2012-05-28 16:34:33

标签: php

我正在使用此代码中的html2canvas生成一个屏幕抓取jpg。但是我不能以特定的div为目标,所以我抓住了整个屏幕。

$canvasImg = $_POST['img'];
$data = base64_decode($canvasImg);
$File = "z.jpg"; 
$Handle = fopen($File, 'w');
fwrite($Handle, $data);  
fclose($Handle);


问题:如何裁剪图像?

这是我的嫌疑人

$canvasImg = $_POST['img'];
$image = base64_decode($canvasImg);
$dest_image = 'z.jpg';
$img = imagecreatetruecolor('200','150');
$org_img = imagecreatefromstring($image);
$ims = getimagesize($image);
imagecopy($img,$org_img, 0, 0, 20, 20, 200, 150);
imagejpeg($img,$dest_image,90);
imagedestroy($img);



但是我得到了一个错误 Warning: getimagesize(�PNG ) [<a href='function.getimagesize'>function.getimagesize</a>]: failed to open stream: Invalid argument

3 个答案:

答案 0 :(得分:1)

您需要imagecreatefromstring();,而不是imagecreatefrompng();。这将把它变成一个PHP图像对象,然后使用imagejpeg();

输出为JPEG

答案 1 :(得分:1)

您的问题表明您正在将PNG的缓冲区传递给该函数。因此,为什么你得到PNG的幻数(89 50 4e 47 0d 0a 1a 0a --- OR --- 0x89“PNG”CR LF 0x1A LF)。您需要将文件保存到临时位置并将位置传递给getimagesize等。因此他们为什么抱怨流。

您可以使用imagecreatefromstring(...)来获取缓冲区并输出资源句柄。

答案 2 :(得分:0)

getimagesize($image);的第一个参数必须是图片的文件名。