縮小時に写真のクオリティを保持させたい

category-icon

 こんにちは。この頃のエントリーは、アップデート情報ばかりなので、たまには別の話題でも。コメントで画質のことに触れられていたので。

 ppBlogでは、ひとつの記事にいくらでも画像を貼り付けることが出来ます。その際に、サイズの大きな画像(デジカメで撮った写真など)は、アップロード時のオプション指定にもよりますが、そのままの大きさでアップロードして保存された後(これはPIXディレクトリへ)、この大きさでは表示するのに大きすぎる場合には、予め指定された大きさ(初期値は350ピクセル)に縮小され、これはPIX/s2ディレクトリへ保存されます。

 記事中に表示されるデジカメの写真などは、最初はこのPIX/s2ディレクトリにある縮小された写真が表示されている場合が多いかと思います。そして、それをクリックすると、PIXディレクトリにある元の大きさの画像を表示するという流れになっています。

 一昔前は、(コンパクト)デジカメの写真一枚のファイルサイズは、せいぜい1MB(メガバイト)程度だったんですが、この頃は、画素数の増大に伴い、3-4MBを超えることも珍しくありません。ppBlogでは、3-4MB程度のファイルサイズでもアップロード可能な処置を入れていますが、これを頻発させるとサーバーに負担をかけうるので、予めお使いのパソコンで写真のファイルサイズを小さくしてアップロードすべきでしょう。個人的には、フリーのソフトである「縮小専用。Link 」を使っています。一括処理も出来て重宝しています。Vistaであれば、標準でついているWindowsフォトギャラリーにある「修正」で、適当に修正を施した後、それを閉じれば自動的に修正されたもので上書き保存されますが、これでもそれなりにファイルサイズが小さくなります(縦横サイズはそのままで、例えば3.49MBが1.2MBになったりとか。まぁ、これでもまだアップロードするには大きいんですが)。

 さて、ここからが本題ですが、もともとファイルサイズが大きい写真をリサイズなどをしてファイルサイズを落とすと、当然ながら写真のクオリティーは低下します。更に、それをppBlogを介してサーバーにアップロードすると、そこで更にリサイズされて、画質が低下することになります。気になる方には気になる部分でしょう。

 ppBlogでは、画像のリサイズは、utils_admin.phpにあるcreate_thumbnail()関数(462行目あたり)が担っています。その中に、

  case 2 : ImageJPEG($img_out, $output); break;
という行(500行目あたり)がありますが、これはJPEG画像を出力する関数です。実は、この関数の第三引数(ひきすう)に、出力する画像の品質を指定できます。

quality はオプションであり、0(品質は最低 ですが、ファイルはより小さい)から100(品質は最高ですが、ファイルは 最大)の範囲で指定します。デフォルトは IJG 品質値(75)です。

引用元: PHP: imagejpeg - ManualLink

 現状、ppBlogでは、この部分の指定はしていないので、初期値である75というクオリティーで保存されていることになります。じゃ、他の値ではどうなるのかな?という疑問が出てきます。なので、簡単に調べてみました。Vistaに初めから付いているサンプルピクチャー(「フランジパニのクローズアップ。」by Kevin Forest氏)を元画像として、Qualityオプションを小さい方から順に10, 30, 75, 80, 85, 90, 100と指定していって、それぞれの画像を保存、そのままのファイルサイズでアップロードしたのが以下です。

 まずは元の画像です。350ピクセルにリサイズされていて(品質75)、クリックするとオリジナルのサイズで表示されます。

test0
元の画像のファイルサイズは105KBで大きさは1024x768です。

 以下、色んな品質でリサイズしていった画像を載せます。低い品質から。

test10
品質10。4.75KB。ブロックノイズが目立ち明らかに劣化している。
test30
品質30。8.4KB。ブロックノイズはだいぶ減ってはいるがモスキートノイズが。
test75
品質75。15.6KB。デフォルト値。まぁまぁ綺麗だが、目を凝らすと・・・。
test80
品質80。17.6KB。うーん。
test85
品質85。20.4KB。品質80よりノイズが減っている。
test90
品質90。25.2KB。85との違いは大きくない。
 
test100
最高品質100。ファイルサイズ70.9KB!その割りには90との違いは微妙。

 これから言えることは、JPEGの性質上、元の写真による部分もあると思うけれど、デフォルト値の75では、ノイズが少し目立ち、品質85だと明らかな改善が見られる。ファイルサイズは、15.6KBが20.4KBと約1.3倍。品質90-100は、見た目のクオリティーはほぼ変わらないにも拘わらず、品質100でのファイルサイズ増大が顕著(90で25.2KBなのが100だと70.9KB。ちなみにオリジナルは105KB)。

 なので、結論としては、初期値の75での品質が気になる方は、85-90あたりの値を指定すると、リサイズしても満足した画質が得られるんじゃないでしょうか。たった一枚のサンプル画像からの帰結ではあるけれど、まぁ妥当なところであると思います。

 というわけで縮小された写真の画質が気になる方は、utils_admin.phpの500行目あたりを、

  case 2 : ImageJPEG($img_out, $output, 85); break; // あるいは90

としてみては如何でしょうか。

 将来的には、画像アップロード時に、指定できるようにしても良いですね。


— posted by martin at 12:29 am   commentComment [9]  pingTrackBack [0]

カテゴリーモジュールの更新

category-icon

 こんにちは、martinです。カテゴリーモジュールのバグがありましたので、ファイル(modules/category.inc.php)の入れ替えをお願いします。これは、少なくともv1.7.0の時点でも、この不具合は存在します。

 不具合が発生する状況としては、カテゴリー名にシングルクォーテーション(')を含んだ文字列がある状態で、カテゴリー順序の並べ替えをすると、カテゴリー設定ファイルがPHP構文エラーをはくのでブログが正常に表示されないというものです。カテゴリーの並べ替えは、ブラウザ側ではJavaScriptを用いて行っているのですが、PHP側でHTML4の文字列参照に変換した文字列をJavaScriptに渡すと自動的に元の文字列に変わっちゃうようで。

' → ' // 元のシングルクォーテーションになる

 カテゴリー名にシングルクォーテーションを使わなければこの不具合は出てきませんが、ppBlog使いの方に制限を課すのは好きではないので。

 このカテゴリーファイルを添付しておきます(タイムスタンプは $ 2009/09/12 08:33:17)。

添付ファイル: category.inc.phpattachedIcon 

— posted by martin at 07:00 pm   commentComment [0]  pingTrackBack [0]

1.8.5の差分です。

category-icon

 こんばんは、martinです。JavaScript関連で、IE8で不具合が見られたので、それを修正したものを添付しておきます。

 IE8だとコメントやコメントフォーム時のスクロールが、意図したように動いていなかったようです(おそらくIEはすべて)。後、FirefoxのFirebugで見つけたNoticeレベルの警告があったので、それも修正しています(Noticeレベルは、まだありそうですが・・・)。

 4つをひとつにまとめたものを添付しておきます。modulesディレクトリのpages.inc.phpがひとつ。jsディレクトリのが3つです。

添付ファイル: DIFF_185_090911.zipattachedIcon 

— posted by martin at 12:25 am   commentComment [2]  pingTrackBack [0]

v1.8.5の差分アップデート

category-icon

 こんばんは、martinです。先週、ppBlogの最新版であるv1.8.5をリリースしました。不具合のご指摘がありましたので、それらを修正したファイルを3つ添付しておきます。コメントhttp://p2b.jp/1251997859#CID1252353524も参考に。

 ひとつは、amazon_associate.phpの中で用いている$pageという変数がすでにグローバル変数として登録されていたので、それに伴うと思われる不具合に対処したものです。

 あと、IEのCSS2対応が弱いために、ppBlogの方で救済処置を施していましたが、IE8ではCSS2のサポートは十分なために、この処置を省きました。

 あと、記事作成画面でのプレビュー機能を若干修正しました。

 以上3つの最新版を添付しておきます。

添付ファイル: utils.phpattachedIcon  amazon_associate.phpattachedIcon 

— posted by martin at 05:22 am   commentComment [8]  pingTrackBack [0]

ppBlog1.8.5リリース

category-icon

 こんばんは、martinです。最新版のリリースです。前回のバージョンが1.8.3だったので、順当に行けば、v1.8.4ですが、「イヤよ」じゃ語呂合わせが今イチだし、奇数好きなのでv1.8.5とします。それなりに書き換えたファイルも多いですし。ppBlogとは直接関係ないですが、昨日でインターネットは40歳だそうで。自分より年上とは知りませんで。WWWLink とは別ですね。

 主な変更点は以下の感じです。

  1. amazonアソシエイトの更新に伴うスクリプトの書き換え。前回の記事Link
  2. ページ作成画面で、PHPタグ(<?php ... ?>)や独自のスタイル記法([style]...[/style])が使えるようになった。このコメントLink も参考に。
  3. JavaScript周りで、変数宣言をみっちりやったり、GoogleのChromeでのスクロールがおかしかったのを修正したり等々。
  4. モバイル閲覧時に、古い記事のコメントが表示されないのを修正。
  5. 記事アクセスランキングのネイティブサポートなど。http://p2b.jp/1250196829Link

あたりですかね。バグ報告には挙がりませんが、個人的に色々気になるところもちょこちょこ修正してます。

 JavaScriptに関してですが、主にFirefoxやChromeでバグフィックスをしていて、IEの存在をすっかり忘れていました。そして、昨日IEでの動作チェックをしないままリリースしたら、IEでいきなりJSエラーが出るという始末(--) 原因は、oParts.jsで使用したwindow.hasOwnPropertyでした。なので、この部分は、

Object.prototype.hasOwnProperty.call(window, 'opera');

で回避。うむ。なので、昨日のバージョン185_090903をダウンロードされた方は、oParts.jsが変わっていますので、IEでエラーが出るようであれば(具体的には、例えばログインアイコンをクリックしても、ダイアログがにょろっと出てこない)、最新のoParts.jsに入れ替えて下さい。

 後、更新PINGの送信先として、Ask.jpさんにも送るようにしていましたが、最近どうもPING送信に失敗するなぁ、と思って調べたら、以下のようでした。お疲れ様でした。

askjp

なので、このAsk.jpさんは、初期リストから削除しています。尚、更新PINGサーバーは、管理画面の「環境設定」→「更新サーバーの管理」で追加したり、削除したりできます。

 前バージョンとの差分とoParts.jsを添付しておきます。既存の上書きで良いです。

添付ファイル: DIFF183_185.zipattachedIcon  oParts.jsattachedIcon 

— posted by martin at 02:10 am   commentComment [9]  pingTrackBack [0]

T: Y: ALL: Online:
Created in 0.0054 sec.
prev
2024.3
next
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31