kmikageです。こちらでははじめましてです。なますて。
Auto Document Image Resizer(Resampler)というプラグインがあり、
TinyMCE上で縮小した画像を、imgタグを読んで自動的にリサイズしてくれるプラグインです。
http://www.danielgibbs.net/journal/auto ... mages-modx
しかし、このプラグインには致命的な問題があり、
・/assets/cache以下に画像ファイルをベタに置いていくので、同一ファイルを複数箇所で呼び出している時に不具合が出る。
・ページが更新される=MODx側キャッシュがクリアされるタイミングでcache以下の画像が消えない為、手動で消す必要がある。
前者は新規に画像を管理するコードを書く事で回避出来そうなのですが、
後者のキャッシュがクリア、もしくは生成されるタイミングのイベントがわからず、つまずいています。
どなたかヒントがあれば教えていただけませんでしょうか。
環境は以下の通りです。
MODx 1.0.3J-p1
美ら海サーバ 共用ホスティング
Linux 2.6 / Apache 2.2.3 / PHP 5.1.6 / safe_mode off / GD enabled(2.0.28)
よろしくお願いします。
Auto Document Image Resizerのキャッシュ処理について
Re: Auto Document Image Resizerのキャッシュ処理について
前者はファイルの縦横幅ごとに縮小ファイルを作ればよさそうですね。
後者は2つアプローチがあって、
・縮小ファイルのファイル名に「.pageCache」を含めて、ページキャッシュ扱いで削除
・OnCacheUpdateまたはOnBeforeCacheUpdateあたりのシステムイベントに引っ掛けて削除
かな?と思います
後者は2つアプローチがあって、
・縮小ファイルのファイル名に「.pageCache」を含めて、ページキャッシュ扱いで削除
・OnCacheUpdateまたはOnBeforeCacheUpdateあたりのシステムイベントに引っ掛けて削除
かな?と思います
Re: Auto Document Image Resizerのキャッシュ処理について
レスが遅くなってしまってスミマセン・・・。TT(ちょっとドタバタしてました・・・OTL)
>yamaさん
アドバイスありがとうございます。
ページキャッシュの動きがいまいち見えないですが、テスト実装して動きを見てみたいと思います。
また何かあればポストします。。。
>yamaさん
アドバイスありがとうございます。
ページキャッシュの動きがいまいち見えないですが、テスト実装して動きを見てみたいと思います。
また何かあればポストします。。。
Re: Auto Document Image Resizerのキャッシュ処理について
MODxのシステムがキャッシュをクリアするタイミングにいっしょにパージすればいいのですよね?
それなら生成サムネイルファイルの名前を少し変えるだけでよいと思います。
たとえば「thumb_xxxxx.jpg」という名前のファイルを生成するようになってたら、「thumb_xxxxx.pageCache.jpg」とする感じで。
もしタイミングもコントロールしたくて独自実装したい場合はdocumentParserの$modx->clearCacheメソッドを参考にするとよさそうに思います。
(システムが標準で使うcache_sync.processorとは別系統の処理ですが、こっちのほうが単純で分かりやすい)
それなら生成サムネイルファイルの名前を少し変えるだけでよいと思います。
たとえば「thumb_xxxxx.jpg」という名前のファイルを生成するようになってたら、「thumb_xxxxx.pageCache.jpg」とする感じで。
もしタイミングもコントロールしたくて独自実装したい場合はdocumentParserの$modx->clearCacheメソッドを参考にするとよさそうに思います。
(システムが標準で使うcache_sync.processorとは別系統の処理ですが、こっちのほうが単純で分かりやすい)
Re: Auto Document Image Resizerのキャッシュ処理について
えーっと、実装してみました。cache以下にファイルを置くのは健在ですが、
・ファイル名にリソースID・乱数を含む。キャッシュ制御はMODxに任せる。
・imagetable_data.pageCache.phpをデータファイルとして作成し、元ファイルとの関連づけを管理する。こちらもキャッシュの一部としてMODx側で適宜削除される。
といった仕様にしています。
また仕様追加として、
・同一リソース内で同一ファイルを複数箇所使用した場合でも、画像をそれぞれ個別に管理する。
・リサイズ画像のキャッシュコントロール(MODx側キャッシュ処理に依存)。
まだテスト不足なのでどのような挙動をするかわかりませんが、以下の不具合を確認しています。
・リロード2回目で、リサイズ画像ではなく元画像が参照されるようになる。(原因は不明。。。OTL どなたか解析して頂けると嬉しいです。)
・PNG画像を処理した際の挙動が不審。
使い方ですが、Pluginに挿入後、イベント「OnWebPagePrerender」にチェックを入れます。
次に、TinyMCEの設定でPath Optionsを変更(docrelative)します。
以上でインストールは完了です。
TinyMCE上でリサイズ前の画像を挿入後、そのまま解像度を変更してリソースを保存すると、
自動的にリサイズ処理がされます。
マクドナルドの椅子が堅くて辛いので、そろそろお家に帰ります。。。
・ファイル名にリソースID・乱数を含む。キャッシュ制御はMODxに任せる。
・imagetable_data.pageCache.phpをデータファイルとして作成し、元ファイルとの関連づけを管理する。こちらもキャッシュの一部としてMODx側で適宜削除される。
といった仕様にしています。
また仕様追加として、
・同一リソース内で同一ファイルを複数箇所使用した場合でも、画像をそれぞれ個別に管理する。
・リサイズ画像のキャッシュコントロール(MODx側キャッシュ処理に依存)。
まだテスト不足なのでどのような挙動をするかわかりませんが、以下の不具合を確認しています。
・リロード2回目で、リサイズ画像ではなく元画像が参照されるようになる。(原因は不明。。。OTL どなたか解析して頂けると嬉しいです。)
・PNG画像を処理した際の挙動が不審。
使い方ですが、Pluginに挿入後、イベント「OnWebPagePrerender」にチェックを入れます。
次に、TinyMCEの設定でPath Optionsを変更(docrelative)します。
以上でインストールは完了です。
TinyMCE上でリサイズ前の画像を挿入後、そのまま解像度を変更してリソースを保存すると、
自動的にリサイズ処理がされます。
マクドナルドの椅子が堅くて辛いので、そろそろお家に帰ります。。。
- 添付ファイル
-
- AutoResizer.txt
- (7.77 KiB) ダウンロード数: 330 回
Re: Auto Document Image Resizerのキャッシュ処理について
アップデートしました。バグフィックスになります。
・リロード2回目で、リサイズ画像ではなく元画像が参照されるようになる。(原因は不明。。。OTL どなたか解析して頂けると嬉しいです。)
→ファイル名の扱いが複雑になった関係で発生していました。ファイル名を処理するfunctionを追加して対応しました。
・ PNG画像を処理した際の挙動が不審。
→pngの再圧縮の処理でおかしくなるようです。
GD関数の引数が明らかに適当でしたので、容量の事も考えJPEGでリサイズするよう変更しました。
尚、コード上ではGIFも対応するようですが、サンプルの画像を用意していないのでまだテストしていません。
(こちらもコードは適当でした。動くかどうか怪しいです。)
・画像圧縮率の変更
→デフォルトでは圧縮率100(最高画質)でしたが、画像によってはQVGA程度でも100KBを超える事がありメリットは無いと考え、
kmikageがPhotoshopで普段使っている80に変更しました。
この値はコードの先頭部分で書き換えが可能です。
かなり突貫(一晩)で手を入れたので汚いコードですが・・・お許し下さい。^^;;;;;
・リロード2回目で、リサイズ画像ではなく元画像が参照されるようになる。(原因は不明。。。OTL どなたか解析して頂けると嬉しいです。)
→ファイル名の扱いが複雑になった関係で発生していました。ファイル名を処理するfunctionを追加して対応しました。
・ PNG画像を処理した際の挙動が不審。
→pngの再圧縮の処理でおかしくなるようです。
GD関数の引数が明らかに適当でしたので、容量の事も考えJPEGでリサイズするよう変更しました。
尚、コード上ではGIFも対応するようですが、サンプルの画像を用意していないのでまだテストしていません。
(こちらもコードは適当でした。動くかどうか怪しいです。)
・画像圧縮率の変更
→デフォルトでは圧縮率100(最高画質)でしたが、画像によってはQVGA程度でも100KBを超える事がありメリットは無いと考え、
kmikageがPhotoshopで普段使っている80に変更しました。
この値はコードの先頭部分で書き換えが可能です。
かなり突貫(一晩)で手を入れたので汚いコードですが・・・お許し下さい。^^;;;;;
- 添付ファイル
-
- Resampler.zip
- (2.8 KiB) ダウンロード数: 336 回