PHP Imagick - 从Base64读取图像

8

我正在使用js处理图像,并希望保存这些变换后的图像。我正在使用ajax发送以下数据:

image : canvas.toDataURL('image/jpeg')

这样,我可以获得图像的base64代码,但我找不到用Imagick读取它的方法。
以下是我的流程:
$img = new Imagick();
$decoded = base64_decode($_POST['image']);
$img->readimageblob($decoded);

但是这个失败了:

致命错误:未捕获的异常 'ImagickException',错误消息为“无法解码此图像格式的委托人'' @ error / blob.c / BlobToImage / 360”位于 /Library/WebServer/Documents/test/save.php:7 堆栈跟踪:

#0 /Library/WebServer/Documents/test/save.php(7): Imagick->readimageblob('u?Z?f?{??z?????...')

有任何想法吗?

3个回答

14

问题解决了。

我必须从发布的字符串中删除data:image/png;base64,部分,然后 imagick 才能将其解释为 blob。


5

readImageBlob — 从二进制字符串中读取图像:http://php.net/manual/zh/imagick.readimageblob.php

$base64 = "iVBORw0KGgoAAAAN....";

$imageBlob = base64_decode($base64);

$imagick = new Imagick();
$imagick->readImageBlob($imageBlob);

header("Content-Type: image/png");
echo $imagick;

1
在回答问题时,最好给出一些解释,说明为什么你的答案是正确的。参考链接 - Stephen Rauch

3

请阅读此网址:

PHP-Imagemagick图像显示

或者尝试以下方法:

$thumbnail = $img->getImageBlob();
$contents =  ob_get_contents();
ob_end_clean();

echo "<img src='data:image/jpg;base64,".base64_encode($contents)."' />";

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接