プロジェクト

全般

プロフィール

Backport(バックポート) #3859

ImageMagickによる画像生成に失敗する

isao sano1年以上前に追加. 7ヶ月前に更新.

ステータス:
Fixed(完了)
優先度:
Normal(通常)
担当者:
対象バージョン:
開始日:
2015-11-06
期日:
進捗率:

100%


説明

Overview (現象)

OpenPNE.yml にて use_imagemagick を 1 または 2 に設定した場合、メンバーがアップロードした画像の表示に失敗する。

Apahceのエラーログには下記のようなエラーが出力される。

[Tue Sep 11 12:04:21 2012] [warn] [client 127.0.0.1] mod_fcgid: stderr: convert: unable to open image `/tmp/IGITF7GbcmB': No such file or directory @ error/blob.c/OpenBlob/2638.. convert: no decode delegate for this image format `/tmp/IGITF7GbcmB' @ error/constitute.c/ReadImage/544.. convert: no images defined `GIF:/home/upsilon/git/openpne3/sqlite/web/cache/img/gif/w120_h120/dc_3_f9d604c23c6725aad2f6dbfb8b2e9388c45b00ff_gif.gif' @ error/convert.c/ConvertImageCommand/3044., referer: http://sns.localhost:18080/sqlite/diary/4?comment_count=4

Causes (原因)

diff --git a/lib/plugins/sfImageHandlerPlugin/lib/image/generator/sfImageGeneratorImageTransform.php b/lib/plugins/sfImageHandlerPlugin/lib/image/generator/sfImageGeneratorImageTransform.php
index 4b442c9..b9fab74 100644
--- a/lib/plugins/sfImageHandlerPlugin/lib/image/generator/sfImageGeneratorImageTransform.php
+++ b/lib/plugins/sfImageHandlerPlugin/lib/image/generator/sfImageGeneratorImageTransform.php
@@ -64,7 +81,16 @@ abstract class sfImageGeneratorImageTransform extends sfImageGenerator

     if ($this->width && $this->height)
     {
+      $this->transform->crop($srcW, $srcH, $srcX, $srcY);
+      $tmpoutputfilename = tempnam(sys_get_temp_dir(), 'IGITF');
+      $result = $this->transform->save($tmpoutputfilename);
+      if (PEAR::isError($result))
+      {
+        throw new sfException($result->getMessage());
+      }
+      $this->transform->load($tmpoutputfilename);
       $this->transform->fit($this->width, $this->height);
+      unlink($tmpoutputfilename);     
     }
   }

4ff9ae5331ed12261ea80dec8c69b38eae1bacf8 に含まれる上記の修正において、画像の加工途中に生成された一時ファイルを load した後に unlink する処理が追加されている。GD を使用する場合には問題にならないが、ImageMagick を使用する場合は load メソッドを実行しても即座にファイルの内容がメモリ上にロードされるものではない(save メソッドが呼び出されるタイミングで convert コマンドが実行される)ため、save メソッドを実行する前に 変換元のファイルを削除してしまうと前述のようなエラーが発生してしまう。

Way to fix (修正内容)

sfImageGeneratorImage::doResize() に渡される $tmpfilename のファイルは最終的に sfImageGenerator::__destruct() メソッドにて削除されるため、doResize() メソッド内では $tmpfilename を削除する必要はない。そのため、現在の実装のように $tmpfilename で渡されたファイルを unlink するのではなく、crop後の $tmpoutputfilename を $tmpfilename に rename することで上書きするように修正を施す。


関連するチケット

関連している OpenPNE 3 - Bug(バグ) #3195: ImageMagickによる画像生成に失敗する Won't fix(対応せず) 2012-09-11

関係しているリビジョン

リビジョン 5ceedaad (差分)
isao sano1年以上前に追加

[sfImageHandlerPlugin] sfImageGeneratorImageTransform::doResize() causes an error when using ImageMagick (fixes #3859, BP from #3195)

リビジョン d6d44f9d
kaoru nishizoe7ヶ月前に追加

Merge pull request #269 from isaosano/t-3859

[sfImageHandlerPlugin] sfImageGeneratorImageTransform::doResize() causes an error when using ImageMagick (fixes #3859, BP from #3195)

履歴

#1 isao sano1年以上前に更新

#2 isao sano1年以上前に更新

  • ステータスNew(新規) から Accepted(着手) に変更

#3 isao sano1年以上前に更新

  • ステータスAccepted(着手) から Pending Review(レビュー待ち) に変更
  • 進捗率0 から 50 に変更

https://github.com/openpne/OpenPNE3/pull/269
にてプルリクエストしました。

レビューお願いします。

#4 kaoru nishizoe1年以上前に更新

  • 対象バージョンOpenPNE 3.8.18 から OpenPNE 3.8.x に変更

#5 kaoru nishizoe1年以上前に更新

  • 対象バージョンOpenPNE 3.8.x から OpenPNE 3.8.19 に変更

#6 kaoru nishizoe1年以上前に更新

  • 対象バージョンOpenPNE 3.8.19 から OpenPNE 3.8.x に変更

#7 kaoru nishizoe11ヶ月前に更新

  • 対象バージョンOpenPNE 3.8.x から OpenPNE 3.8.21 に変更

#8 kaoru nishizoe10ヶ月前に更新

  • 対象バージョンOpenPNE 3.8.21 から OpenPNE 3.8.x に変更

#9 Shinichi Urabe8ヶ月前に更新

  • ステータスPending Review(レビュー待ち) から Pending Testing(テスト待ち) に変更
  • 進捗率50 から 70 に変更

#11 kaoru nishizoe7ヶ月前に更新

  • 対象バージョンOpenPNE 3.8.x から OpenPNE 3.8.22 に変更

#12 kaoru nishizoe7ヶ月前に更新

  • 対象バージョンOpenPNE 3.8.22 から OpenPNE 3.8.x に変更

#13 kaoru nishizoe7ヶ月前に更新

  • 対象バージョンOpenPNE 3.8.x から OpenPNE 3.8.22 に変更

#14 Chiharu Nakajima7ヶ月前に更新

  • ステータスPending Testing(テスト待ち) から Pending Merge(マージ待ち) に変更
  • 進捗率70 から 80 に変更

テストOKです

#15 kaoru nishizoe7ヶ月前に更新

  • ステータスPending Merge(マージ待ち) から Fixed(完了) に変更
  • 進捗率80 から 100 に変更

マージしました

他の形式にエクスポート: Atom PDF