如何用PHP/ImageMagick将PSD图层直接转为Base64并输出为JSON
解决方案
问题出在你直接对ImageMagick的图层对象调用base64_encode()——$layer是Imagick类的实例,不是PNG格式的二进制数据流,直接编码只会得到对象的字符串表示,自然格式错误。
正确的做法是先将图层对象导出为PNG格式的二进制数据,再进行Base64编码,最后整理成JSON输出:
<?php // 假设$psd是已加载完成的PSD文件对应的Imagick对象集合 $layersBase64 = []; foreach ($psd as $no => $layer) { // 跳过第一个图层 if (!$no) { continue; } // 确保图层是Imagick实例,设置输出格式为PNG if ($layer instanceof Imagick) { $layer->setImageFormat('png'); // 获取PNG格式的二进制数据流 $pngData = $layer->getImageBlob(); // 转Base64编码 $base64 = base64_encode($pngData); // 将编码结果存入数组,可保留图层编号作为键名 $layersBase64["layer_{$no}"] = $base64; } } // 设置响应头并输出JSON对象 header('Content-Type: application/json'); echo json_encode($layersBase64); ?>
关键说明
setImageFormat('png'): 强制图层以PNG格式导出,避免默认格式不匹配导致的编码错误getImageBlob(): 从Imagick对象中提取对应格式的原始二进制图像数据,这才是需要编码的核心内容- 最后用
json_encode()将编码后的图层数组转为标准JSON结构,同时设置正确的Content-Type响应头,确保客户端能正确解析输出内容
内容的提问来源于stack exchange,提问作者Selling Systems
相关产品推荐
相关产品推荐

