如何将使用 ImageMagick 处理的图像(未保存)传递给 Zend_Pdf_Image?我想转移 $image = new Imagick($imageFile); 直接到 $pdfImage = Zend_Pdf_Image:: ...,不保存。那可能吗?
感谢您的建议,于尔根
如何将使用 ImageMagick 处理的图像(未保存)传递给 Zend_Pdf_Image?我想转移 $image = new Imagick($imageFile); 直接到 $pdfImage = Zend_Pdf_Image:: ...,不保存。那可能吗?
感谢您的建议,于尔根
我正要简单地说“不”,但后来我想我会仔细检查代码并考虑是否还有其他可能性。
该imageWithPath()
方法利用其他类中的一些辅助方法来解码$filePath
参数引用的图像。这些辅助方法中的每一个所做的第一件事就是打开$filePath
using fopen()
。
所以这意味着您可以将任何类型的资源传递给imageWithPath()
您的 PHP 安装支持的方法。
一般来说,这意味着文件和 URL,但从 PHP 5.2 开始,它还包括data://
包装器。我自己没有使用过这个(多年来我一直在写出临时文件,然后将它们传递给它们imageWithPath()
),但根据手册页,它可能只允许您传入修改后的数据而不必先将其保存到文件中.
更多信息: http: //php.net/manual/en/wrappers.data.php
如果您使用这种方法得到了一些工作,请让我们都知道。:-)
我将把我的 3 美分加到上面的詹姆斯回答中。他是完全正确的——允许使用数据:包装器。
展示如何使用 ImageMagick 将 svg 转换为 Zend_Pdf_Image 的示例方法:
class My_Pdf extens Zend_Pdf {
function imageFromSvg($path, $w, $h) {
if (!class_exists('Imagick') || !file_exists($path)) return false;
$svg = file_get_contents($path);
$im = new Imagick();
$im->readImageBlob($svg);
$im->setImageFormat('png8');
$im->adaptiveResizeImage($w,$h);
return new Zend_Pdf_Resource_Image_Png('data:image/png;base64,'.base64_encode ($im));
}
}
注意 Zend_Pdf_Resource_Image_Png 不支持位深度大于 8 的 png。返回的对象可以很容易地使用它的 drawImage 方法嵌入到 Zend_Pdf 中。例子:
$pdf = new My_Pdf();
$page = $pdf->newPage(Zend_Pdf_Page::SIZE_A4);
$page->drawImage($pdf->imageFromSvg($svg,400,400),400,100,100,100);
我使用重新缩放为 400x400 的 svg,因为那时我可以获得更好的打印质量。您可以根据自己的需要对此进行试验。祝你好运!