2012-12-27 73 views
0

如何將ImageMagick(未保存)處理的圖像傳遞給Zend_Pdf_Image? 我想轉移$ image = new Imagick($ imageFile);直接到$ pdfImage = Zend_Pdf_Image :: ...,而不保存。那可能嗎?使用ImageMagick和zend_pdf

感謝您的任何建議, 克林斯曼

回答

1

我正要簡單地說「不」,但我想我會仔細檢查代碼,並考慮是否有任何其他的可能性。

imageWithPath()方法利用其他類中的一些輔助方法來解碼參數爲$filePath的圖像。這些輔助方法的第一件事是使用fopen()打開$filePath

那麼的含義是,您可以將任何類型的資源傳遞給您的PHP安裝所支持的imageWithPath()方法。

一般來說,這意味着文件和URL,但自PHP 5.2以來它還包含data://包裝。我自己也沒有用過(我一直在寫臨時文件,然後將它們傳遞給imageWithPath()多年),但根據手冊頁,它可能只是讓您傳遞修改的數據,而不必將其保存到文件中第一。

更多信息:http://php.net/manual/en/wrappers.data.php

請讓我們都知道,如果你使用這種方法做某件事情。 :-)

+0

詹姆斯,感謝您的這種考慮。我通過保存圖像並在Zend_Pdf中重新加載來解決它。親切的問候,Juergen。 – Juergen

0

我只是將我的3美分添加到詹姆斯的答案上面。他完全正確 - 允許使用data:wrapper。

實施例方法示出了如何使用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不使用其的drawImage支持與位深度更然後8. 返回對象可以Zend_Pdf容易地包埋的PNG方法。例如:

$pdf = new My_Pdf(); 
$page = $pdf->newPage(Zend_Pdf_Page::SIZE_A4); 
$page->drawImage($pdf->imageFromSvg($svg,400,400),400,100,100,100); 

我使用SVG重新調整爲400×400,因爲我得到更好的打印質量呢。你可以根據你的需要進行試驗。 祝你好運!