将ImageMagick与zend_pdf一起使用

时间:2012-12-27 13:27:12

标签: imagemagick zend-pdf

如何将使用ImageMagick(未保存)处理的图像传递给Zend_Pdf_Image? 我想转移$ image = new Imagick($ imageFile);直接到$ pdfImage = Zend_Pdf_Image :: ...,不保存。这可能吗?

感谢您的任何建议, 尔根

2 个答案:

答案 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,因为我的打印效果更好。您可以根据自己的需要进行试验。 祝你好运!