Ticket #4127 (closed defect: fixed)

Opened 8 years ago

Last modified 6 years ago

ImageMagick使用時に透過PNGが正しく処理されない

Reported by: pnetan Assigned to: nagasawa
Priority: minor Milestone: OpenPNE2.14.9
Component: 指定しない Version: 2.14.x
Keywords: Cc:

Description (Last modified by nagasawa)

■概要

PNG-24形式のPNGのうち、透過色を含むPNG(透過PNG)を投稿した場合で、 かつ ImageMagick? を使用している環境の場合、透過PNGの透過処理が無視され、透過処理が行われた画像にならない。

■原因

原寸表示時、DBから画像キャッシュを生成する際にアルファ情報を保持していないことが原因。

■修正内容

webapp/lib/OpenPNE/Img/ImageMagick.php の create_rawcache() で、 imagecreatefromstring() より生成される $output_gdimg に対して以下を指定する。

imagealphablending($output_gdimg, false);
imagesavealpha($output_gdimg, true);

(詳細については http://php.net/manual/ja/function.imagesavealpha.php を参照)

■関連情報

  • #4462 透過PNG画像の原寸表示時に透過情報が正しく処理されない

http://sns.openpne.jp/?m=pc&a=page_fh_diary&target_c_diary_id=21103より転記

○現象
PNG-24形式のPNGのうち、透過色を含むPNG(透過PNG)を投稿した場合で、
かつ ImageMagick を使用している環境の場合、透過PNGの透過処理が無視され、透過処理が行われた画像にならない。


○原因
サムネイル作成時の問題ではなく、DBから実画像をキャッシュする段階で発生している模様。

webapp/lib/OpenPNE/Img/ImageMagick.phpの
create_rawcache() 内で imagepng() を使用してキャッシュを吐きだしていますが、どうやらこのimagepng() に対して、imagealphablending($output_gdimg, false)、imagesavealpha($output_gdimg, true)を指定して完全なアルファチャネル情報を保存しなければならないのにその対応が行われていないことによるものと考えられます。(その方法で解決を確認)


○環境
バージョン:OpenPNE 2.12.12



○追記(2009/07/15)
リサイズなしの場合も発生してしまう模様で、
Img.php の create_cache_from_raw_img() にも同様の処置が必要の模様 

Attachments

png_error.png (40.8 kB) - added by imamura623 on 02/10/11 16:56:39.

Change History

08/26/09 16:49:23 changed by nakasone

  • keywords deleted.

以下のような確認を行ったところ再現できました。

■確認ブラウザ

  • FireFox3

■確認バージョン

  • 2.12.x
  • 2.14.x

■手順

  1. config.php→USE_IMAGEMAGICKを「2」に設定
  2. 日記を書く→PNG-24形式の透過PNGをアップロード
  3. 透過がPNGが正しく処理されていない

11/19/10 16:47:45 changed by kiwpon

  • version changed from 2.12.x to 2.14.x.
  • milestone set to OpenPNE2.14.9.

可能であれば対応しましょう。

02/01/11 15:13:15 changed by nagasawa

  • owner changed from nobody to nagasawa.
  • status changed from new to assigned.

02/01/11 18:34:58 changed by nagasawa

  • keywords set to 確認中.

http://trac.openpne.jp/changeset/13794 にて上記報告の修正を取り込みました。

テスト結果

区分1 区分2 区分3 期待結果結果
ImageMagic?有効 76x76 PNG-32 透過される
ImageMagic?有効 原寸 PNG-32 透過される
ImageMagic?有効 76x76 PNG-8 透過され、PNG-8のまま保持されている
ImageMagic?有効 原寸 PNG-8 透過され、PNG-8のまま保持されている
ImageMagic?無効 76x76 PNG-32 透過される
ImageMagic?無効 原寸 PNG-32 透過される
ImageMagic?無効 76x76 PNG-8 透過され、PNG-8のまま保持されている
ImageMagic?無効 原寸 PNG-8 透過され、PNG-8のまま保持されている

02/07/11 17:24:17 changed by nagasawa

r13796 にて 2.14 へマージしました。

02/07/11 17:37:13 changed by nagasawa

  • description changed.

02/10/11 16:56:39 changed by imamura623

  • attachment png_error.png added.

02/10/11 16:59:30 changed by imamura623

  • keywords changed from 確認中 to 差し戻し.
  • status changed from assigned to new.

携帯版で透過png画像を確認したところ、背景が黒くなってしまいました。

携帯画面キャプチャ

上記の画像はシミュレータでの画像ですが、実機(auのmisora)で確認したところ同様の状態が発生しました。

使用した画像は以下のリンクの画像です。

ご確認をお願いします。

02/13/11 02:56:01 changed by urabe

  • keywords changed from 差し戻し to テスト待ち.

コード確認しました 問題ないかと思います

携帯の場合は、jpgで出力する仕様ですので、問題ないかと思います。

02/14/11 15:41:14 changed by takai

このチケットは「ImageMagick使用時に、最終的に出力されるPNG画像が、適切な透過情報を持っていない」という問題に関する内容です。また、少なくともOpenPNE2系の携帯版では、PNG画像は全てJPEG画像に変換して出力しています(PNG画像は出力していない)。

つまり、このチケットで扱われる問題は、携帯版には関係しません。

comment:7 の問題は、このチケットで施された修正によるものではなく、「PNG画像は全てJPEG画像に変換する(携帯版では、透過PNG画像は透過情報を失ったJPEG画像として出力される)仕様」に対する指摘であると判断できます。

comment:8 ではこの観点から「jpgで出力する仕様ですので、問題ない」と示されていますが、透過情報が失われていること自体が問題ないかについて言及されていなかったため、補足をしておきます(透過情報が失われることは仕様として想定しているため、現時点では comment:7 の内容はバグとして考えるべきではないということです)。

02/14/11 19:45:14 changed by imamura623

  • keywords deleted.
  • status changed from new to closed.
  • resolution set to fixed.

「PNG画像は全てJPEG画像に変換する(携帯版では、透過PNG画像は透過情報を失ったJPEG画像として出力される)仕様」

上記の指摘については #4468 にて対応を考えることとします。

他には問題が無いので、このチケットは対応完了とします。