php imagick - 从base64读取图像

时间:2012-08-14 17:11:33

标签: php base64 imagick

我用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 ????? ...')

任何想法为什么?

3 个答案:

答案 0 :(得分:11)

想通了。

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

答案 1 :(得分:3)

阅读此网址; -

PHP-Imagemagick image display

或尝试: -

$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;