Project

General

Profile

Backport(バックポート) #3563

画像アップロード時に上限サイズを超えるファイルは自動的に縮小してアップロードする

Added by Mutsumi Imamura over 5 years ago. Updated over 5 years ago.

Status:
Fixed(完了)
Priority:
Normal(通常)
Target version:
Start date:
2014-02-21
Due date:
% Done:

100%


Description

画像アップロード時に上限サイズを超えるファイルは自動的に縮小してアップロードする。
OpenPNEおよびサーバー側のアップロードサイズ制限の上限をアップすることで回避することはできますが、
サーバーのディスク容量の切迫にも繋がるため、リサイズし保存する機能を追加する。


Related issues

Related to OpenPNE 3 - Enhancement(機能追加・改善) #3219: 投稿画像を自動的に圧縮する機能を実装する New(新規) 2012-09-28
Copied from OpenPNE 3 - Enhancement(機能追加・改善) #3561: 画像アップロード時に上限サイズを超えるファイルは自動的に縮小してアップロードする Rejected(差し戻し) 2014-02-21

Associated revisions

Revision 0f9a94d5 (diff)
Added by AkihiroKOBAYASHI over 5 years ago

able to resize the uploaded image when its size is larger than assigned(fixed #3563)

Revision bc4a264e
Added by Yuya Watanabe over 5 years ago

Merge remote-tracking branch 'origin/pr/126' into stable-3.6.x (fixes #3563, BP from #3561)

Conflicts:
lib/model/doctrine/File.class.php

History

#1 Updated by Mutsumi Imamura over 5 years ago

#2 Updated by Mutsumi Imamura over 5 years ago

  • Target version changed from OpenPNE 3.6.14 to OpenPNE 3.6.x

実装が間に合わないため3.6.14の対応項目からは見送ります。

#3 Updated by Mutsumi Imamura over 5 years ago

  • Assignee set to Akihiro KOBAYASHI
  • Target version changed from OpenPNE 3.6.x to OpenPNE 3.6.15

#4 Updated by Akihiro KOBAYASHI over 5 years ago

  • Status changed from New(新規) to Accepted(着手)

#5 Updated by Akihiro KOBAYASHI over 5 years ago

  • Status changed from Accepted(着手) to Pending Review(レビュー待ち)
  • % Done changed from 0 to 50

#6 Updated by Yuya Watanabe over 5 years ago

設計として気になること
  • 一般に画像の変換処理は複数適用することが多いためフィルタとして実装される事が多いが,この実装ではそういったことは考慮されていないため複数の変換を行う必要があったり縮小アルゴリズム自体を入れ替えたりといった変更を行う際に実装コストが極端に高くなる可能性があります.この辺りの話は画像認識技術などで前処理と呼ばれる話が参考になると思います.容量を下げる目的は達成できているため今の時点では問題無いと思います.
  • File クラスに File としての特性以外のメソッドを多く持つようになっています.出力時の画像のリサイズなどは sfImageHandler が担っていますが,この中でも実装がうまく分離できていないように見えるためあまり参考にはならないと思いまが,今後の課題として画像処理については別クラスや(広義における)別トランザクションとして分離するほうが望ましいのではないかと思います.
実装の方法で気になること
  • (設計による問題として) https://redmine.openpne.jp/issues/3560#note-10 でも書きましたが同時に複数の実装を追加する際にそれぞれが独立した機能であるにもかかわらずマージが難しくなるような実装が容易に行えてしまいます.程度や優先度にもよりますが,マージ時の作業が行い易いように処理の塊はまるごと一つにして既存部分は数行追加削除のみといったような差分を心がけると喜ばれると思います.(もちろんこれは一般的な考えを述べているわけではありません)
  • Doctrine では save() メソッドはいろんなところで暗黙的に使われている可能性があるため実装によっては意図しない呼び出しが発生する可能性があります.同じ save() の複数回呼び出しでもテキストについては非可逆な処理が行われていないため問題無いですが非可逆な圧縮を行う画像の場合 save() を呼び出すたびに画像劣化を起こす可能性があります.軽くながめた感じでは問題無いと思いますが注意する必要があるかもしれません.
  • コミットメッセージが fixed となっています. wiki にも書かれていますが redmine のツールと連携をするために fixes のほうが正しいです.

メッセージは関連するチケットの ID を含んでください。 ID は 「refs」や「fixes」というキーワードを伴って指定してください。これを守るための有用なフックスクリプトを用意してあります: http://gist.github.com/202866

仕様として気になること
  • 画像の容量を下げるアプローチとしてはピクセル数を下げるという方法の他に,圧縮アルゴリズムを変更するといったアプローチもあります.jpeg などはパラメータとして quality で画質を下げ,ピクセル数を下げずに保存時の容量を下げるようにしてといったことも可能かもしれません.容量を下げる目的は達成できているため今の時点では問題無いと思います.
  • 例えば デジタル一眼などの高画質の画像をアップロードする際に極端に画像劣化を起こす可能性がありますがそのあたりの調整がしにくいようなパラメータのような気がします.サーバ側での画像縮小アルゴリズムやブラウザ側での画像拡大アルゴリズムなどによってその辺り変わるような気がするので,この実装でどのようになるのか挙動として把握しておく必要があるかなと思います.カスタマイズとしてこの辺りをよく変更する可能性が多分にあると思いますが,前述の設計で気になることで書いたように変更コストが高くなる可能性があります.容量を下げる目的は達成できているため今の時点では問題無いと思います.

#7 Updated by Yuya Watanabe over 5 years ago

  • Status changed from Pending Review(レビュー待ち) to Pending Testing(テスト待ち)
  • % Done changed from 50 to 70

#8 Updated by Anonymous over 5 years ago

  • Status changed from Pending Testing(テスト待ち) to Pending Review(レビュー待ち)
  • % Done changed from 70 to 50

更新履歴 0f9a94d52d6e185bfa6e8e1080c73355956ae7aa で適用されました。

#9 Updated by Yuya Watanabe over 5 years ago

更新履歴 bc4a264e875b6c27438fca8ba7236731a78fc08f で適用されました。

#10 Updated by Yuya Watanabe over 5 years ago

  • Status changed from Pending Review(レビュー待ち) to Pending Testing(テスト待ち)
  • % Done changed from 50 to 70

#11 Updated by isao sano over 5 years ago

  • Status changed from Pending Testing(テスト待ち) to Fixed(完了)
  • % Done changed from 70 to 100

確認しました。問題ありません。

#12 Updated by Akihiro KOBAYASHI about 5 years ago

Also available in: Atom PDF