我用js操纵图像,我想保存这些转换后的图像。我用ajax发布这些数据:
image : canvas.toDataURL('image/jpeg')
这样,我得到了图像的base64代码,但我找不到用Imagick读取它的方法。
这是我的过程:
$img = new Imagick();
$decoded = base64_decode($_POST['image']);
$img->readimageblob($decoded);
但这失败了:
致命错误:/cibrary/WebServer/Documents/test/save.php:7中未捕获的异常'ImagickException',消息'此图像格式没有解码委托',@ error / blob.c / BlobToImage / 360' 堆栈跟踪:
#0 /Library/WebServer/Documents/test/save.php(7):Imagick-> readimageblob('u?Z?f?{?? z ????? ...')
任何想法为什么?
答案 0 :(得分:11)
想通了。
我必须从发布的字符串中删除data:image/png;base64,
部分,然后imagick可以将其解释为blob。
答案 1 :(得分:3)
阅读此网址; -
或尝试: -
$thumbnail = $img->getImageBlob();
$contents = ob_get_contents();
ob_end_clean();
echo "<img src='data:image/jpg;base64,".base64_encode($contents)."' />";
答案 2 :(得分:0)
readImageBlob - 从二进制字符串中读取图像:http://php.net/manual/en/imagick.readimageblob.php
$base64 = "iVBORw0KGgoAAAAN....";
$imageBlob = base64_decode($base64);
$imagick = new Imagick();
$imagick->readImageBlob($imageBlob);
header("Content-Type: image/png");
echo $imagick;