PHPを使用して、画質をあまり落とさず、1秒以下の処理時間で23個の画像を合成する方法(ロジック)を教えて下さい。
次の(1)と(2)は、23枚のPHP画像を合成する処理を自宅PCとレンタルサーバーで行った結果です。
(1)自宅PCで処理
画像の合成をPHPで下記のソースのように組みましたが、横1120×縦2016のPNGファイル(容量は1ファイル当たり約
6.6KB~140KB)を23個合成して一つのファイルにする処理が終了すると、結果として合成された画質はキレイ(10段階中10の画質)ですが、処理時間が5.5秒程かかります。
そこで、合成素材の23個のファイルを全て半分の大きさ横560×縦1008にすると、結果として合成された画像の画質は結構落ちました(10段階中6の画質)が、処理時間は2.5秒程でした。
(2)さくらのレンタルサーバーで処理
上記の(1)のファイル(横560×縦1008)を同じロジックで処理をしたところ、1秒遅くなり3.5秒となりました。
GDの合成を高速化するのは、調べた結果、eacceleratorとKGDしか見当たりませんでした。(KGDを利用する金銭的な余裕がないのでKGDは選択肢から除外しました)
eacceleratorのインストールは、下記リンクのページを参照して行いました。
http://d.hatena.ne.jp/memory_agape/20110626/1309 …
結果は、phpinfoを表示した添付画像となり、処理時間はほぼ一緒です。0.1秒速くなったかどうかの違いでした。
○質問
1.下記のソースのやり方よりも処理が早く終わるやり方をご存知の方はいませんか?
2.処理速度の結果があまり変わらないのは、eacceleratorのインストールが失敗しているからでしょうか?
(eacceleratorのインストールが、成功しているのか失敗しているのか処理時間が変わないので良く分かりません)
※希望としては、画質をあまり落としたくないので、さくらのレンタルサーバーにて横560×縦1008の画像を23個合成して処理時間を1秒以下にしたいです。
また、画像の種類は、使用できる色の種類が多いPNG形式で1秒以下の処理時間を実現したいです。
分かる方は、ご教授願いますm(__)m
■自宅PC
windows vista
xampp/apache 2.2.4
PHP Version 5.2.3
■さくらのレンタルサーバー
UNIX系 OS FreeBSD
Apache 1.3.x
PHP 5.2.17
phpMyAdmin 3.3.10.3
MySQL 5.1
MySQL 文字コード UTF-8
bigdump ver.0.34b
■ソース
http://angelito.sakura.ne.jp/ques.txt
No.3ベストアンサー
- 回答日時:
「色鮮かな画像」ってどんな画像のことでしょう?
SVGにはimage要素があって、PNG等の画像を、SVG画像の一部として使うことができます。
http://www.hcn.zaq.ne.jp/___/SVG11-2nd/struct.ht …
また、着せ替えなどだったら、JavascriptやFlash等を使って、クライアント側で並びかえとかを行なうのが普通でしょう。
サーバー側のプログラム(今回の場合なら、あなたが作ろうとしているPHPのスクリプト)では、最初の準備と、完成時の処理くらいしかやらないのが普通です、一秒毎に画像をリロードさせるような凶悪なことはしません。
度々のご回答ありがとうございます。
返事が遅くなってすみませんでした。
アバターのような着せ替えをしたかったのですが、今まで調べて分からず、
こういった質問できる場所でやっとこの方法を知り、他の方法はないものだと
思っていました。
おっしゃっている普通のやり方というのが、とても衝撃的です。
普通とおっしゃっているやり方がどうしても知りたいです。
参考となる書籍やサイトがありましたら、どうか教えて下さい。
お願いしますm(__)m
ちなみに「色鮮かな画像」とは、ヤフーのアバターやGREEのアバターのような、きめ細かくはっきりとした色で表現されている画像のことです。
No.2
- 回答日時:
・毎回合成しないといけないのでしょうか?
・23枚全部、毎回必要なのでしょうか?
・入力はPNGでないとだめなのでしょうか?
・出力はPNGでないとだめなのでしょうか?
・1秒以内でないとだめなのでしょうか?
PNGの圧縮は、画像に適した最適化をこれと言ってやっているわけでは無いので、合成処理よりもファイル読み書きや圧縮/伸長に時間がかかっているのだと思います。設定次第では、サイズを犠牲にして速度優先、というのもありますが、劇的に変わるわけでもありません。
今の方法で1秒以内、ってもの凄いハイエンドサーバーでもないと無理なのでは?
> 横1120×縦2016のPNGファイル(容量は1ファイル当たり約6.6KB~140KB)
画像サイズに対して、容量がえらく小さいように思います。ほとんど背景色で「絵」の部分はもっと小さい(100x100とか)とか、二値とか16色とか、そんなことは無いですか?
絵のサイズが小さいなら、1120x2016同士で合成するのではなく、その絵の範囲だけの画像を予め用意して、座標指定して合成するようにすれば、大分処理が減るはずです。
単純な画像なら、SVGのようなベクター型のフォーマットにすれば、サーバーでは合成は一瞬です。
今の方法の固執しないで、根本から考えなおしてはどうです?
ご回答ありがとうございます。
私の理想は、ヤフーのアバターのような鮮やかな画像の合成をストレスを感じない程度の
処理速度で行う事です。
教えていただいたSVGのようなベクター型を調べたところ、色鮮やかな画像とまではいかないと感じました。
毎回23枚の画像を合成するのは、パーツの種類が23種類あるからです。
画像サイズに対して容量が小さいものは、おっしゃる通り背景の画像で、一色で塗りつぶした単純なものです。最終的には、凝った絵の背景にしたいと考えています。
ご相談ですが…
23種類の絵を合成で重ねた場合、同サイズの画像合成の方法しか知らないのですが、
絵の範囲だけの画像を予め用意して、座標指定して合成する方法はどのようなロジックを書くのでしょうか?参考となるサイトのページを教えていただけるだけでもありがたいです。
色鮮やかな画像のファイル読み書きや圧縮/伸長に時間のかからないファイル形式は、どんなものがあるのでしょうか?
すごく参考になるご回答だと感じていますので、もう少しアドバイスを下さい。
No.1
- 回答日時:
まず「合成」ってなに?ならべる?重ねる?
それと今のロジックを提示すべきでは?
そもそも23個の画像を毎回動的に合成しなくてはいけない状況って
どうなんでしょう?あらかじめいくつかを合成しておけないのでしょうか?
ご回答ありがとうございます。
合成は、同じサイズの23枚のPNG画像を重ねるという意味です。
ロジックは、合成処理部分ですが、質問欄の一番下にリンクを記述しました。
あらかじめいくつかを合成しておくというアドバイスですが、おっしゃる通りだと思います。
合成処理をする度に、23種類の中から変更したいパーツを決めて、23種類のパーツに対して決められた順番で合成(重ねる)するロジックです。
現状は、全身の合成処理だけあり、23種類の画像の合成結果が全身の画像として表示していましたが、顔の合成画面と全身の合成画面で二つに分割すればあらかじめ合成しておくことができるかもしれませんね。
処理が速くできるヒントがまだありましたら、ご教授下さいm(__)m
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルVBA マクロ処理中のポップアップメッセージについて 1 2023/08/04 21:34
- PHP アップロード画像数でCSSを分けることに成功したのですが、画像の横に文字を並べることが出来ません。 3 2023/07/28 17:16
- Excel(エクセル) EXCELのグラフを画像(JPG形式)で保存、通常実行がうまく行かない。ステップインはうまく行く 3 2022/08/30 12:06
- 画像編集・動画編集・音楽編集 動画をディスク作成すると画像が乱れる。 4 2022/06/24 07:49
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- Visual Basic(VBA) エクセルVBA コードが同じでもファイルによって処理速度が大きく変わるのはなぜ 5 2022/11/06 21:34
- 大学受験 身長187cmです。 東大理3合格者の勉強時間最短のギネス記録は5分28秒らしいですね。映像見てみま 7 2022/07/30 17:53
- その他(プログラミング・Web制作) uwscとWinShotを使いスクリーンショットを撮る 1 2022/06/30 21:15
- 物理学 物理学の質問です。 あなたの車が9.8m/s^2で加速できる場合、0から時速60マイルまでどのくらい 2 2022/09/19 09:50
- デスクトップパソコン 仕事で使うPC 10 2023/04/23 00:27
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBSの「MsgBox」について
-
透過PNGが透過されない!!
-
拡張子php画像をjpg画像等に変...
-
PHPでPDFを画像で表示したい
-
Illustratorで文字と画像を流し...
-
MYSQLから、画像表示するには
-
クリックされた画像URLの照合
-
ListViewコントロールでサムネ...
-
画像ファイル pngのメリットを...
-
画像リストを作りたい
-
Webbrowser上に表示した画像を...
-
ビットマップ画像を読み込むプ...
-
ファルダに画像をいれておいて...
-
pictureboxに表示した画像のフ...
-
libpng 24bpp rawをPNGに変換す...
-
PHP+PostgreSQLを使ってPDFファ...
-
VBAでJPGサイズ変更
-
PHP GD 画像が縮小できない
-
PHPのWARNINGをcatchするには
-
フォントの色を変えるには?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBSの「MsgBox」について
-
拡張子php画像をjpg画像等に変...
-
透過PNGが透過されない!!
-
Illustratorで文字と画像を流し...
-
アップロード画像数でCSSを分け...
-
imageフォルダに、画像をリサイ...
-
PythonのTkinter詳しい方へ。画...
-
VBAでJPGサイズ変更
-
C# Excelファイルへの画像挿入。
-
ListViewコントロールでサムネ...
-
PHPで吐き出した画像にリンクを...
-
php,mysqlにて画像パス保存/表...
-
PHP+PostgreSQLを使ってPDFファ...
-
スマートフォンから画像のアッ...
-
画像にテキストを埋め込むジェ...
-
実行ファイル(exe)に画像ファ...
-
ビットマップ画像を読み込むプ...
-
改行コードのカウント
-
Ajaxで画像表示
-
画像アップロードのファイル名...
おすすめ情報