プロジェクト

全般

プロフィール

Backport(バックポート) #3563

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

Mutsumi Imamura約10年前に追加. ほぼ10年前に更新.

ステータス:
Fixed(完了)
優先度:
Normal(通常)
対象バージョン:
開始日:
2014-02-21
期日:
進捗率:

100%


説明

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


関連するチケット

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

関係しているリビジョン

リビジョン 0f9a94d5 (差分)
AkihiroKOBAYASHI が約10年前に追加

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

リビジョン bc4a264e
Yuya Watanabeほぼ10年前に追加

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

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

履歴

#1 Mutsumi Imamura約10年前に更新

#2 Mutsumi Imamura約10年前に更新

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

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

#3 Mutsumi Imamura約10年前に更新

  • 担当者Akihiro KOBAYASHI にセット
  • 対象バージョンOpenPNE 3.6.x から OpenPNE 3.6.15 に変更

#4 Akihiro KOBAYASHI約10年前に更新

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

#5 Akihiro KOBAYASHI約10年前に更新

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

#6 Yuya Watanabeほぼ10年前に更新

設計として気になること
  • 一般に画像の変換処理は複数適用することが多いためフィルタとして実装される事が多いが,この実装ではそういったことは考慮されていないため複数の変換を行う必要があったり縮小アルゴリズム自体を入れ替えたりといった変更を行う際に実装コストが極端に高くなる可能性があります.この辺りの話は画像認識技術などで前処理と呼ばれる話が参考になると思います.容量を下げる目的は達成できているため今の時点では問題無いと思います.
  • 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 Yuya Watanabeほぼ10年前に更新

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

#8 匿名ユーザー がほぼ10年前に更新

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

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

#9 Yuya Watanabeほぼ10年前に更新

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

#10 Yuya Watanabeほぼ10年前に更新

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

#11 isao sanoほぼ10年前に更新

  • ステータスPending Testing(テスト待ち) から Fixed(完了) に変更
  • 進捗率70 から 100 に変更

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

#12 Akihiro KOBAYASHI9年以上前に更新

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