Backport(バックポート) #3110
Yuya Watanabe さんが12年以上前に更新
h3. 概要 管理画面から画像をアップロードしたときに透過画像のときに透過されなくなる. h3. 原因 管理画面画像リスト(/pc_backend.php/monitoring/imageList)で画像を表示する際に保存されている画像のフォーマットが考慮されていない. 他の画像の場合にはファイル名のサフィックスとして拡張子を付与する(例: hoge_png)ことで sf_image_path() 使用時に自動的に保管するようになっているが, 管理画面の画像アップロードページからのアップロードではそのサフィックスが与えられていない. apps/pc_backend/modules/monitoring/templates/_imageInfo.php <pre> 5 <dd class="upImage"><a href="<?php echo sf_image_path($image->getName()) ?>"><?php echo image_tag_sf_image($image->getName(), $options = array('size' => '120x120')) ?></a></dd> 詳しい挙動を調べてないので問題内容のみ報告. </pre> lib/vendor/symfony/lib/plugins/sfImageHandlerPlugin/lib/helper/sfImageHelper.php <pre> 27 function image_tag_sf_image($filename, $options = array()) 28 { 29 if (empty($options['alt'])) 30 { 31 $options['alt'] = ''; 32 } 33 34 if (!$filename) 35 { 36 if (isset($options['no_image'])) 37 { 38 $filename = $options['no_image']; 39 unset($options['no_image']); 40 } 41 else 42 { 43 $filename = 'no_image.gif'; 44 } 45 return image_tag($filename, $options); 46 } 47 48 $filepath = sf_image_path($filename, $options); ... 69 function sf_image_path($filename, $options = array(), $absolute = false) 70 { 71 if (isset($options['f'])) 72 { 73 $f = $options['f']; 74 } 75 elseif (isset($options['format'])) 76 { 77 $f = $options['format']; 78 } 79 elseif (is_callable(array($filename, 'getType'))) 80 { 81 $f = str_replace('image/', '', $filename->getType()); 82 } 83 else 84 { 85 $parts = explode('_', $filename); 86 $f = array_pop($parts); 87 } 88 89 if ($f !== 'jpg' && $f !== 'png' && $f !== 'gif') 90 { 91 $f = 'jpg'; 92 } </pre> h3. 修正方法 File クラスインスタンスを表示用のヘルパー関数に渡すようにしていき、インスタンスの保持する MIME Type 情報に基づく画像フォーマットを選択できるようにする. <pre> diff --git a/apps/pc_backend/modules/monitoring/templates/_imageInfo.php b/apps/pc_backend/modules/monitoring/templates/_imageInfo.php index 2e4af77..37d1913 100644 --- a/apps/pc_backend/modules/monitoring/templates/_imageInfo.php +++ b/apps/pc_backend/modules/monitoring/templates/_imageInfo.php @@ -2,7 +2,7 @@ <div class="cell"> <dl> <dt class="day"><?php echo $image->getCreatedAt() ?></dt> -<dd class="upImage"><a href="<?php echo sf_image_path($image->getName()) ?>"><?php echo image_tag_sf_image($image->getName(), $options = array('size' => '120x120')) ?></a></dd> +<dd class="upImage"><a href="<?php echo sf_image_path($image) ?>"><?php echo image_tag_sf_image($image, $options = array('size' => '120x120')) ?></a></dd> <dd class="fileName"><?php echo $image->getName() ?></dd> <?php if ($deleteBtn): ?> <dd class="delete"> </pre>