iT邦幫忙

1

PHP 的 imagick 圖檔輸出,在做印刷顏色會變淡的問題

  • 分享至 

  • xImage

情況是這樣,由於客戶的印刷機只支援AI跟PDF檔。
所以我利用了 imagick 來做圖片處理掛入PDF上,原圖片是PNG。

以下是我的程式碼。


$imagesPath = 'test.png';

$imagick = new Imagick($imagesPath);

//分辨率調整
$resoSet = 350; //解析分辨率
$resoHv = $resoSet/72;  //調整比例處理

//輸出尺寸處理
$width = 710;   //寬
$height = 490;  //高
/* 這邊是試著做轉換處理
$imagick->stripImage();
$imagick->setImageColorspace(Imagick::COLORSPACE_SRGB);
$imagick->setImageCompression(Imagick::COMPRESSION_UNDEFINED);
$imagick->setImageCompressionQuality(0);
*/

$imagick->setResolution($resoSet, $resoSet);
$imagick->resizeImage($width*$resoHv,$height*$resoHv,\Imagick::FILTER_SINC ,1);

//這裏原本有加白景處理
//$imagick->setBackgroundColor(new ImagickPixel('white'));
//$imagick->setGravity ( Imagick::GRAVITY_CENTER );

$imagick->extentImage ( $width*$resoHv , $height*$resoHv , 0 , 0 );
$imagick->setImageFormat('pdf');
$pdfPath = 'pdf/test'.date('YmdHis').'.pdf';
$imagick->writeImage($pdfPath);

輸出出來的PDF,再電腦上看都很正常。但客戶拿該檔案去印刷後,就是顏色會變成淡化。
由於我對印刷相關的參數不是很了解。再加上我也沒辦法做印刷測試。畢竟直接開對應的PDF檔來看都是很正常的顏色。雖然我明白看到的並不一定等於印刷出來的。
現在一直不知道問題點在哪。

看看是否有前輩們能提點一下。

========= 20210331 後續補充 ============
經某位美術人員提點。她看完成品,有發現一個重點。
並非是偏色引起淡化。而是因為PNG的透明度問題。
而造成了印刷淡化。

為此,她教我用一招處理。先將PNG圖轉成JPG後再做補色處理後。
再輸出PDF再搭配ICC色彩處理。

經過他的提點重新處理,發現淡化的原因消失了。
雖然還是感覺有點偏色。(因為我還未加上ICC處理)
但至少解決了。感謝各位的幫忙了。

看更多先前的討論...收起先前的討論...
Windows的色彩描述都已經被人嫌到爆了,更何況是"可能"沒通過色彩管理l就輸出的php......真的要做到畫面看到和印出來都能一致的系統,大概只有MAC了吧
這我也很明白,早期在搞印刷的程式。也是有個色樣板做調整。
但那是很早期的印刷機才需要。
現在的都是可以處理了。

我將GD庫捨棄用imagick,也是為了配合印刷。
可惜的是,原本以為imagick能幫忙處理成AI,只是我想的太美好了。
最多只能處理成PSD而已。

其實有找到多寫入對應色板的程式碼,只是對它苦手,沒機器能調整。
也不知道該如何做模擬。
還要考慮到輸出設備的色彩描述是否和網頁呈現的是否一致,試問.........用戶使用的螢幕色彩模型,是否有辦法讓PHP取得並做配對呈現?輸出的設備呢?如果都難,是右真心考慮去訂閱CC會不會比較好一點
player iT邦大師 1 級 ‧ 2021-03-29 15:43:39 檢舉
印刷用CMYK
螢幕顯示用RGB
轉圖檔時要用色彩管理
至於怎麼用你自己看吧

imagick
https://www.php.net/manual/en/book.imagick.php

ImageMagick - Color Management
https://imagemagick.org/script/color-management.php
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
小魚
iT邦大師 1 級 ‧ 2021-03-26 15:29:45

沒有器材很難測試,
光是電腦調亮調暗參數改變,
看到的顏色就不一樣.

或許可以問問印刷廠要怎麼配合,
他們應該有他們的設定參數.

看更多先前的回應...收起先前的回應...

後續客戶有拿一個樣本過來。居然是高解析度的。大約是3000DPI。
一張圖片要接近500MB。
說要跟它一樣。

目前大體上來說,看起來只是單純的DPI問題了。
但開太大對我來說也不是辦法。目前只能麻煩相關人員去跟客戶說明了。

有後續的發展我再說好了。

淺水員 iT邦大師 6 級 ‧ 2021-03-26 19:48:31 檢舉

客戶不是說只能用 pdf 跟 ai 印刷
那麼他們怎麼知道那張 500M 的 png 印出來跟他們想要的一樣?

小魚 iT邦大師 1 級 ‧ 2021-03-26 22:29:02 檢舉

其實說的也是,
要不要先用其他的軟體來轉看看?

淺水員
其實是我說明不好,500MB是PDF檔非PNG。
是他們的樣本檔。有列印出來看。

小魚
目前已確定非轉檔的問題。且這需要用PHP能用的繪圖元件,選擇也有限。本身程式我也不喜歡用EXEC這一類的命令處理。

淺水員 iT邦大師 6 級 ‧ 2021-04-01 01:01:25 檢舉

好奇問一下:

  1. 圖片是誰產生的?
  2. php需要做哪些加工?

我會這樣問是因為 pdf 本身可以直接塞 jepg 原檔進去
如果只是簡單的「留邊、加上文字、縮放」可以不動到任何圖檔資訊
(類似網頁的 css 直接調整邊界、長寬,也可壓上文字)

所以如果圖片來源是他們的員工
並且可以提供 jepg 檔案的話
那麼我再提供作法

補充:

  • PNG 內嵌到 pdf 需要轉換成 pdf 支援的格式,無法直接不動到原資料。
  • icc 資訊是產生圖檔的軟體提供,而不是印刷設備的 icc,所以如果是用 imagmagick 的話,要去抓原本圖片內的 icc。

淺水員
你說到問題核心了。

一開始我本來以為圖片是我公司這邊負責的。
所以很盡心的要處理這件事,還想麻煩美工人員來協助處理。
但就在大家莫名奇妙,我也不知道發生什麼事的情況下。
PM才告訴我,其實圖片是客戶自已製作上傳的。

我就一整個矇了....

淺水員 iT邦大師 6 級 ‧ 2021-04-01 10:12:50 檢舉

客戶自己做的話,會加上icc的應該不多
有色偏滿正常的
只能把有附icc的檔案在轉pdf時幫忙附上去
沒有的看有沒有需要提醒印刷可能會有顏色偏差了

我要發表回答

立即登入回答