2012-05-28 54 views
0

我使用html2canvas从此代码生成屏幕抓图jpg。不过,我不能针对一个particaular div,所以我抓住整个屏幕。来自base64_decode的PHP裁剪图像

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


问题:我怎么能裁剪图像?

这是我attampt

$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

+0

您正在寻找imagecreatefromstring()http://php.net/manual/en/function.imagecreatefromstring.php –

+0

你是不是传递一个图像到imagecreatefrompng(),有一定的误差与图像变量 –

+0

重编辑我的问题,实现'imagecreatefromstring()' –

回答

0

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

+1

如果你想在飞行中这样做,那么'imagesx($ image)'和'imagesy($ image)'是你需要的,以返回x和y的大小值适当。 – Death

1

你想imagecreatefromstring();,不imagecreatefrompng();。这将变成一个PHP图像对象,然后你可以输出为JPEG使用imagejpeg();

1

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

您可以使用imagecreatefromstring(...)这将采取缓冲区并输出资源的句柄。