ここの情報は古いです。ご理解頂いた上でお取り扱いください。

Opened 9 years ago

Closed 7 years ago

#4127 closed defect (fixed)

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

Reported by: imamura623 Owned by: 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 (1)

png_error.png (40.8 KB) - added by imamura623 7 years ago.

Download all attachments as: .zip

Change History (11)

comment:1 Changed 9 years ago by nakasone

Keywords: 再現待ち removed

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

■確認ブラウザ

  • !FireFox3

■確認バージョン

  • 2.12.x
  • 2.14.x

■手順

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

comment:2 Changed 8 years ago by kiwpon

Milestone: OpenPNE2.14.9
Version: 2.12.x2.14.x

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

comment:3 Changed 7 years ago by nagasawa

Owner: changed from nobody to nagasawa
Status: newassigned

comment:4 Changed 7 years ago by nagasawa

Keywords: 確認中 added

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のまま保持されている

comment:5 Changed 7 years ago by nagasawa

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

comment:6 Changed 7 years ago by nagasawa

Description: modified (diff)

Changed 7 years ago by imamura623

Attachment: png_error.png added

comment:7 Changed 7 years ago by imamura623

Keywords: 差し戻し added; 確認中 removed
Status: assignednew

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

携帯画面キャプチャ

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

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

ご確認をお願いします。

comment:8 Changed 7 years ago by urabe

Keywords: テスト待ち added; 差し戻し removed

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

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

comment:9 Changed 7 years ago by takai

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

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

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

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

comment:10 Changed 7 years ago by imamura623

Keywords: テスト待ち removed
Resolution: fixed
Status: newclosed

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

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

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

Note: See TracTickets for help on using tickets.