iT邦幫忙

0

PHP 的 imagick 圖檔輸出,同尺寸轉換會發生不同尺寸的問題

目前遇到的問題如下。

同樣尺寸的PNG圖。

一份是用AI生成出來的,有做了300解析度的輸出。圖片大小為 2961*2045
這份其實就是我的樣板圖

第二份是在網頁中用了 canvas 去載入上面的PNG後,再網頁上操作合併圖片完後。
再生成PNG圖。也是 2961*2045

我PHP是用如下的語法來生成JPG圖

            $imagick = new Imagick($imagesPath);
            $imagick = $imagick->flattenImages();            
            $imagick->setImageFormat('jpg');            
            $imagick->writeImage($imgPath);

第一份的PNG經由這個程式輸出的尺寸,會是正常的 710*490
但第二份則會直接生成 2961*2045

雖然我推測跟那個300解析的設定有關係。只是試了幾種方式還是解決不了這個問題。
想問看看有沒有前輩們曾經處理過這樣的問題。

這邊可能有些要先事先說明。因為這是要做印刷用的。其尺寸共有三片,都是定義好的東西。
所以要做尺寸調整的話,很容易發生跑版。
畢竟只有一張圖會經由 canvas 生成,其它2片並不會。所以如果做尺寸調整,多少都會發生對不上的問題。
所以希望是能不調整的設定為主。

看更多先前的討論...收起先前的討論...
那就三片都經過 canvas 之後另存三片再把另存的三片餵給imagick 啊
我們一般作圖檔處理,尤其是要輸出的東西最好處理軟體要一致,不然印刷廠那也容易出問題,還有AI 跟 canvas 有沒有處理 RGB 跟 CMYK 呢,印刷基本上都要走 CMYK,不然色差扯不完的,印刷最好用向量檔,文字轉曲線,走CMYK色票,如果用點陣圖,那DPI 300以上,CMYK色票,大概就這樣
淺水員 iT邦大師 6 級 ‧ 2021-04-07 17:16:13 檢舉
所以是要對 canvas 的圖加上 300dpi 的設定嗎?
@淺水員
是的,如果可以的話。或是該怎麼用imagick 來處理也行
@窮嘶發發發
這有點難度。因為其它兩片並沒辦法經由瀏覽器來處理。也不太符合客戶的要求。
雖然我也有想過這樣處理也沒錯。只是難度太高。
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

1
淺水員
iT邦大師 6 級 ‧ 2021-04-07 17:55:05
最佳解答

這可以直接設定圖片解析度為 300 dpi

$imagick->setImageResolution(300, 300);

參考:Imagick::setImageResolution

題外話
點陣圖最原始單位是 px(Pixel),代表真實的資料
而印刷或是 pdf 常用的尺寸是 pt,相當於 1/72 inch(1 inch = 25.4 mm)
發問中的 710 x 490 單位其實是 pt
而圖檔的 2961 x 2045 單位是 px
pt 是現實生活中的長度,px 只是代表長寬有多少個資料點
兩者的換算是透過 dpi 這個參數

其實我也有找到這個。
下午在測試是不行的。

後來才發現一件事,我還有用了尺寸調整沒將他刪掉。
所以......

現在重新處理過,果然可以這樣處理。
謝啦!!

我要發表回答

立即登入回答