2017-02-15 163 views
0

我發現使用Imagick的解決方案herehere,但我真的不想去Imagick擴展應有的安全問題。如何通過GD調整大小來設置DPI/PPI?

目前,我正在做大小調整如下:

list($width, $height) = getimagesize($file_path); 

$src = imagecreatefrompng($file); 
$dst = imagecreatetruecolor($newwidth, $newheight); 

//prepare the transparency 
imagealphablending($dst, false); 
imagesavealpha($dst , true); 
$transparent = imagecolorallocatealpha($dst, 255, 255, 255, 127); 

imagefilledrectangle($dst, 0, 0, $newwidth, $newheight, $transparent); 

imagecopyresampled($dst, $src, 0, 0, 0, 0, $newwidth, $newheight, $width, $height); 

但它是設置總是72 DPI(甚至覆蓋原文件DPI)。

有沒有辦法使用GD設置DPI?

回答

1

看來PHP GD擴展沒有辦法在編寫圖像文件時直接指定DPI。您有兩個選項:

  • 將GD源代碼中的#define GD_RESOLUTION 72更改爲您所需的值,然後自行重新編譯GD擴展。請注意,這將影響GD在系統上保存的所有圖像。
  • 操作二進制文件(JPEG或PNG?)來更改文件頭中的DPI值。 DPI只是一個元值,它與像素數據沒有關係。

如果您只需要更改DPI值,爲什麼要調整圖像大小?或者相反 - 爲什麼當你調整圖像大小時需要更改DPI?圖像是否用於打印?

+0

我想要2個圖像:一個用於普通顯示器,另一個用於高密度顯示器(DPI的兩倍),如視網膜和4k顯示器。我正在調整大小,原始圖像比我需要的分辨率大得多。 – Lucas

+1

然後你根本不需要改變DPI。只需創建縮小的圖像並使用'img srcset'讓瀏覽器決定顯示哪個圖像。 – Matey

+0

感謝您的幫助!這正是我所期待的。 – Lucas

相關問題