2011-03-29 44 views
2

我需要拍攝某人通過表格上傳的照片,調整大小,合併高分辨率幀@ 300dpi並保持最佳打印質量@ 300dpi。使用php和GD打印質量圖像

是否可以通過GD處理高分辨率圖像,如果是這樣,您能否提供一些關於如何處理的信息?我有代碼已經做了調整和合並,但我不知道它是否會以正確的dpi工作。

感謝

回答

6

它基本上是可行的:只要使用像素適量。 (dpi單元在數字成像中沒有意義,它僅用於將數字[像素]圖像轉換爲物理格式)。

例子:

11 x 8 inch canvas @300 dpi = 3300 x 2400 pixels 

但是,你需要足夠的內存來處理圖像的這個大。經驗法則是

needed bytes = width x height x 3 (or 4 if alpha-channels are used) 

如果您複製或調整大小,則此需求會增加,因爲腳本需要在內存中保留多個副本。

您將需要一個非常慷慨的memory_limit設置爲此工作。

另請注意,GD只能處理RGB圖像。

對於大圖像和CMYK數據,如果您可以在服務器上使用它,ImageMagick可能是更好的選擇。

+1

全部正確。請注意,CMYK TIFF 3300 x 2400像素大約爲30MB(3300像素x 2400像素x 4色) – horatio 2011-03-29 19:10:39

+0

因此,只要可以確定,只要其正確的像素數匹配300dpi,那麼它會正確打印?我想象它將需要相當多的資源來做高分辨率的樂趣。 – David 2011-03-29 19:18:51

+0

@David將取決於您打算使用的軟件打印它 - 您可能必須指定dpi,才能以正確的格式打印像素。你將無法在位圖文件中做到這一點(至少不能以可靠的方式) – 2011-03-29 20:38:01

1

DPI是用於打印目的的轉換因子。它對GD如何看待圖像完全沒有影響。無論是10dpi還是5000dpi,200像素乘150像素的圖像總是200像素乘150像素。但是,當您打印出圖像時,200x150 @ 10dpi會爲20英寸x 15英寸圖像(300平方英寸)製作圖像,而5000dpi版本則會製作0.04x0.03(0.0012平方英寸)圖像。

唯一的限制是,你必須有足夠的內存可用於PHP來保存圖像內容在內存中的解碼。 24位1000x1000像素圖像需要1000x1000x3 =大約3meg字節的內存,最小值(加上內部開銷)。然後額外的內存來保存新的圖像,這將有你的圖像處理的結果。

0

GD是所有關於像素的,DPI並沒有涉及它,因爲這需要某種設備輸出。如果您知道最終的打印尺寸,那麼只需確保像素尺寸在您需要的DPI上正確縮放即可。

一般來說,如果您使用大型圖像,您的主要問題將是速度和內存使用效率。我建議使用ImageMagick來做更復雜的工作。

1

網頁上的默認圖像dpi是72或96(Mac或Windows/Linux)。您可以使用img標籤的寬度和高度屬性指定圖像的寬度和高度,並在其內生成具有所需dpi的圖像。

<img src="/images/image.png" width="300" height="200"> 

比方說,您的默認屏幕分辨率是72,不是做出一個$resdpi變量:

$resdpi = $resolution/72; 

然後,使圖像GD由可變寬度和高度相乘,你就會得到一個大的圖像,將在屏幕上顯示爲默認的72dpi,但將以更高的分辨率打印。