PHPでPhotoShopとIllustratorのファイルをアップロードするページを作成しています。
※アップロードできるファイルは「psd、ai」です。
内部でImageMagickのコマンドを実行してjpgファイルに変換しています。
変換するImageMagickのコマンドは以下のコマンドです。
convert -flatten psdファイル jpgファイル
※jpgファイルは変換後のものです。
psdファイルが200MBを超えると変換に時間がかかっているのか、止まっているのかわからず・・・
※20MB以下のPSDファイルは問題なくjpgに変換できています。
teratermでコマンドラインから上記のコマンドを実行しても同じ結果になってしまします。
ImageMagickでPSDファイルを変換するのをネットで調べても解決できるような記事を見つける事ができませんでした。
※たぶん、私の調べ方に問題があるのかと思っていますが・・・
申し訳ありませんが、皆さんのお知恵を私におかしいただけませんでしょうか。
些細な事でも何でも構いませんので宜しくお願いします。
No.5ベストアンサー
- 回答日時:
とりあえずflattenは使わない方が良いよ。
flattenを抜きにしてレイヤー単位で出力させて
それをまた重ね合わせたらどう?
(どこのレイヤーまで処理が行っているかわかると思うけど)
>teratermでコマンドを実行して変換までいかず、teratermのカーソルが点滅してるだけで・・・
>30分ぐらいまでは実行してみたんですが、途中でCtrl + Cで止めてしまいわかりません。
>参考にならなくてすみません。
PSDって拡張子は変わってないけどフォトショップのバージョン毎に微妙に中身が変わっている。
(aiと違って保存するバージョンが選択はできないけど)
それで変で問題が発生する可能性ってあるのかな?
topコマンドでCPUやメモリの動きを監視してImageMagickが動いているか見てみた方がいいかも
>本題に戻りますが、参考になりそうな質問と回答をStackoverflowで見つけましたので掲載させていただきます。
(「ImageMagick MemoryLeak」で検索したらすぐ見つかったから理不尽な難癖つけられる前にもっと早くやっていればよかったなぁ・・・)
>PHPレベルでのメモリリークならFatalErrorで知ることが出来るのにちょっぴり不便ですね・・・
あのさぁコンソールでImageMagickをやっても問題が起きているって質問者書いているのが見えない人?
回答ありがとうございます。
アドバイスいただいた通り、flattenのオプションをコマンドから抜いて実行してみました。それでconvertコマンドを実行後、teratermでtopコマンドを実行してみたら、一応、convertコマンドが動いている事は確認できました。
レイヤー毎の画像(jpg)が変換されるかと思いましたが変換されずそのままでした。
教えていただいたサイトを参考に下記のコマンドを実行してみたらpsdファイルからjpgファイルに変換する事ができました。
convert psdファイル[0] jpgファイル
本当に助かりました。
ありがとうございました。
では、失礼します。
No.4
- 回答日時:
30分はいくらなんでも長い気がしますね・・・
動画処理ならともかくそんなに時間のかかる画像処理って・・・
aiファイルのことを忘れていましたが、aiを処理できるようにした関数は見当たらず、今回はそもそもGDで実現するのが目的でもないので、割愛させていただきます。実際のところ私が紹介したimagecreatefrompsdはバイナリファイルをPHPレベルで処理しているだけなので「GDの拡張処理」とは言い難いんですけどね。
本題に戻りますが、参考になりそうな質問と回答をStackoverflowで見つけましたので掲載させていただきます。
(「ImageMagick MemoryLeak」で検索したらすぐ見つかったから理不尽な難癖つけられる前にもっと早くやっていればよかったなぁ・・・)
http://stackoverflow.com/questions/9993085/php-i …
マニュアル - メソッド (参考になるコメントあり)
http://www.php.net/manual/ja/imagick.setresource …
http://php.net/manual/ja/imagick.getresourcelimi …
定数一覧に
imagick::RESOURCETYPE_UNDEFINED (integer)
imagick::RESOURCETYPE_AREA (integer)
imagick::RESOURCETYPE_DISK (integer)
imagick::RESOURCETYPE_FILE (integer)
imagick::RESOURCETYPE_MAP (integer)
imagick::RESOURCETYPE_MEMORY (integer)
とありましたので、
$constants = array(
imagick::RESOURCETYPE_UNDEFINED,
imagick::RESOURCETYPE_AREA,
imagick::RESOURCETYPE_DISK,
imagick::RESOURCETYPE_FILE,
imagick::RESOURCETYPE_MAP,
imagick::RESOURCETYPE_MEMORY,
);
print_r(array_map(array($im, 'getResourceLimit'), $constants));
で上限をとりあえず調べてみてください。
PHPレベルでのメモリリークならFatalErrorで知ることが出来るのにちょっぴり不便ですね・・・
この回答への補足
回答ありがとうございます。
せっかく説明していただいて申し訳ありませんがPHP内ではコマンドを実行して画像を変換しているので・・・
次、コマンドでの変換でなく、ImageMagickのクラスで変換する時は参考にさせていただきます。
では、失礼します。
No.2
- 回答日時:
>> 根本的に私の考え方が間違っていたのでしょうか。
>> PSDファイルをJPGに変換するのにImageMagickを使用しないのでしょうか。
もちろんいろいろな方法があるでしょう。
>> PHPでPSDを画像変換するに、どの方法が一般的なのでしょうか。
個人的には、ImageMagickがデフォルトでは使えない環境が多い一方、GDならばデフォルトで使える場合がほとんどなので、後者の方が一般的だと思います。
>> せっかくアドバイスいただいたのですが、できればImageMagickで変換したいと考えていますが・・・
>> 無理ならアドバイスいただいた方法を使用するようにプログラムを変更したいと考えます。
今回掲載させていただいた回答は、「psdファイルが200MBを超えると変換に時間がかかっているのか、止まっているのかわからず・・・」というのがImageMagickのせいなのかそうではなく単に処理が重いだけなのか判別するためのものです。
無理にGDを勧めているわけではありません。
この回答への補足
回答が遅くなってすみません。
アドバイスいただいたPHPのクラスをダウンロードして下記のサイトを参考にしてサンプルを作成しました。
http://phpspot.org/blog/archives/2009/06/photosh …
ダウンロードしたファイルを配置してブラウザで実行したらダウンロードしたクラスの内容とワーニングがブラウザに出力されてしまいました。
それでクラス内のコメントを全て削除してブラウザで再度、実行しました。
そしたら実行中のままになって処理されているのか、されてないのかわからない状況で・・・
こっちも200MBを超えるファイルは変換できないのでしょうか。
もしかしたらImageMagickとPHP PSD Readerなどの変換処理できるファイルサイズはきまっているのでしょうか。
またImageMagickとPHP PSD Readerを実行した際のログは残せたりできるのでしょうか。
申し訳ありませんがもう少し、私にお付き合い下さい。
皆さん、宜しくお願いします。
No.1
- 回答日時:
これで試してみてください。
http://www.kingsquare.nl/phppsdreader/
こちらでも同様に時間がかかるのであれば妥協するしかないですね。
もともと重い処理だと思われるので。
この回答への補足
回答ありがとうございます。
根本的に私の考え方が間違っていたのでしょうか。
PSDファイルをJPGに変換するのにImageMagickを使用しないのでしょうか。
PHPでPSDを画像変換するに、どの方法が一般的なのでしょうか。
せっかくアドバイスいただいたのですが、できればImageMagickで変換したいと考えていますが・・・
無理ならアドバイスいただいた方法を使用するようにプログラムを変更したいと考えます。
どうか、再度ご教授いただけたら幸いです。
申し訳ありませんが宜しくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(ソフトウェア) コマンドプロンプトについて教えてください。 状況: 画像編集ソフト上でネットから保存した画像を使うの 3 2022/05/26 11:14
- Windows 10 renameコマンドでファイル名からアンダースコアを消す方法 5 2023/04/24 13:33
- PDF pdfファイルのjpgファイルへの変換 5 2022/06/03 10:13
- UNIX・Linux テキストファイルをページ番号付きでコマンドラインから印刷したい 1 2023/02/22 12:47
- Visual Basic(VBA) エクセルのマクロについて教えてください。 7 2023/07/04 09:18
- Visual Basic(VBA) ファイル名の右側を変更したい ファイル名:「1001日別売上」の左側へ「2022」を追加し、「202 6 2022/10/14 10:03
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/03 13:18
- Visual Basic(VBA) 入力ボックスが繰り返しポップアップして止まらない。 下記コードでファイル名の変更をしたいのですが、変 1 2022/09/08 11:27
- Windows 10 JPG PNG サポートされていない形式 (JPGファイルで開ける、開けないがある場合) 4 2022/04/23 13:46
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
緯度、経度の 10進法と 60進法...
-
家電製品の電力周波数を変える機械
-
isoをimgに変換したいのですが...
-
MATLAB用のプログラムをScilab...
-
VB6からVB2010への変換について
-
VBAを使って二進法計算
-
シフトJISのCSVファイルをUFT-8...
-
StrConvの使い方について教えて...
-
VisualBasicをC++に変換する方...
-
c++でドル円変換のプラグラム...
-
画像をバイナリに変換
-
数値英単語変換プログラム
-
アセンブラ言語の数字を数値に...
-
bmp→jpgに、jpg→bmpに
-
Excel-VBAのmsgBox()の不思議
-
はしごの高をマックで表示する...
-
C++からCへのソース変換について
-
FortranをC++(VC++)へ変換
-
シーケンサ 数字の変換
-
C#で漢数字をアラビア数字に変...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
緯度、経度の 10進法と 60進法...
-
Excel-VBAのmsgBox()の不思議
-
3のつく数字と3の倍数のみを表...
-
bmp→jpgに、jpg→bmpに
-
分を時間に変換するプログラム
-
Mac 乗数の入力方法
-
家電製品の電力周波数を変える機械
-
10進数をBCDに変換する方法
-
VB6からVB2010への変換について
-
C/C++→JAVAに変換するツール
-
C#でのpngからbmpへの変換について
-
【EXCEL】カナ、ひらがなを英字...
-
数値英単語変換プログラム
-
エクセルVBAの自動変換機能?
-
なぜ通信には16進数文字列が使...
-
画像ファイル変換(Tiff→PDF)
-
UTF8→ShiftJISに変換したいです!
-
c++でmatからvectorへの変換の...
-
VB.NETをJavaに変換するツール...
-
SJIS⇔UTF-8の文字コード...
おすすめ情報