如何将使用ImageMagick(未保存)处理的图像传递给Zend_Pdf_Image? 我想转移$ image = new Imagick($ imageFile);直接到$ pdfImage = Zend_Pdf_Image :: ...,不保存。这可能吗?
感谢您的任何建议, 尔根
答案 0 :(得分:2)
我只是简单地说“不”,但后来我想我会仔细检查代码并考虑是否还有其他可能性。
imageWithPath()
方法利用其他类中的一些辅助方法来解码$filePath
参数引用的图像。这些辅助方法的第一件事就是使用$filePath
打开fopen()
。
意味着意味着您可以将任何类型的资源传递给PHP安装所支持的imageWithPath()
方法。
一般来说,这意味着文件和URL,但从PHP 5.2开始,它还包含data://
包装器。我自己没有使用过这个(我已经编写了临时文件,然后将它们传递给imageWithPath()
多年),但根据手册页,它可能只是让你传入修改过的数据而不必保存它首先是一个文件。
更多信息:http://php.net/manual/en/wrappers.data.php
如果您使用此方法可以使用某些工具,请告诉我们。 :-)
答案 1 :(得分:0)
我将把我的3美分加到James的答案上面。他是完全正确的 - 允许使用数据:包装器。
示例方法显示如何使用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);
我使用svg重新调整为400x400,因为我的打印效果更好。您可以根据自己的需要进行试验。 祝你好运!