ImageMagickでPSDを変換する方法とは?

このQ&Aのポイント
  • PHPでPhotoShopとIllustratorのファイルをアップロードするページを作成しています。
  • 内部でImageMagickのコマンドを実行してjpgファイルに変換しています。
  • psdファイルが200MBを超えると変換に時間がかかっているようです。
回答を見る
  • ベストアンサー

ImageMagickでPSDを変換するには。

PHPでPhotoShopとIllustratorのファイルをアップロードするページを作成しています。 ※アップロードできるファイルは「psd、ai」です。 内部でImageMagickのコマンドを実行してjpgファイルに変換しています。 変換するImageMagickのコマンドは以下のコマンドです。 convert -flatten psdファイル jpgファイル ※jpgファイルは変換後のものです。 psdファイルが200MBを超えると変換に時間がかかっているのか、止まっているのかわからず・・・ ※20MB以下のPSDファイルは問題なくjpgに変換できています。 teratermでコマンドラインから上記のコマンドを実行しても同じ結果になってしまします。 ImageMagickでPSDファイルを変換するのをネットで調べても解決できるような記事を見つける事ができませんでした。 ※たぶん、私の調べ方に問題があるのかと思っていますが・・・ 申し訳ありませんが、皆さんのお知恵を私におかしいただけませんでしょうか。 些細な事でも何でも構いませんので宜しくお願いします。

  • PHP
  • 回答数4
  • ありがとう数8

質問者が選んだベストアンサー

  • ベストアンサー
  • oooioi
  • ベストアンサー率29% (16/55)
回答No.5

http://paranoid360.blogspot.jp/2011/04/imagemagickpsd.html とりあえずflattenは使わない方が良いよ。 flattenを抜きにしてレイヤー単位で出力させて それをまた重ね合わせたらどう? (どこのレイヤーまで処理が行っているかわかると思うけど) >teratermでコマンドを実行して変換までいかず、teratermのカーソルが点滅してるだけで・・・ >30分ぐらいまでは実行してみたんですが、途中でCtrl + Cで止めてしまいわかりません。 >参考にならなくてすみません。 PSDって拡張子は変わってないけどフォトショップのバージョン毎に微妙に中身が変わっている。 (aiと違って保存するバージョンが選択はできないけど) それで変で問題が発生する可能性ってあるのかな? topコマンドでCPUやメモリの動きを監視してImageMagickが動いているか見てみた方がいいかも >本題に戻りますが、参考になりそうな質問と回答をStackoverflowで見つけましたので掲載させていただきます。 (「ImageMagick MemoryLeak」で検索したらすぐ見つかったから理不尽な難癖つけられる前にもっと早くやっていればよかったなぁ・・・) >PHPレベルでのメモリリークならFatalErrorで知ることが出来るのにちょっぴり不便ですね・・・ あのさぁコンソールでImageMagickをやっても問題が起きているって質問者書いているのが見えない人?

edo_1972
質問者

お礼

回答ありがとうございます。 アドバイスいただいた通り、flattenのオプションをコマンドから抜いて実行してみました。それでconvertコマンドを実行後、teratermでtopコマンドを実行してみたら、一応、convertコマンドが動いている事は確認できました。 レイヤー毎の画像(jpg)が変換されるかと思いましたが変換されずそのままでした。 教えていただいたサイトを参考に下記のコマンドを実行してみたらpsdファイルからjpgファイルに変換する事ができました。 convert psdファイル[0] jpgファイル 本当に助かりました。 ありがとうございました。 では、失礼します。

その他の回答 (3)

noname#244856
noname#244856
回答No.4

30分はいくらなんでも長い気がしますね・・・ 動画処理ならともかくそんなに時間のかかる画像処理って・・・ aiファイルのことを忘れていましたが、aiを処理できるようにした関数は見当たらず、今回はそもそもGDで実現するのが目的でもないので、割愛させていただきます。実際のところ私が紹介したimagecreatefrompsdはバイナリファイルをPHPレベルで処理しているだけなので「GDの拡張処理」とは言い難いんですけどね。 本題に戻りますが、参考になりそうな質問と回答をStackoverflowで見つけましたので掲載させていただきます。 (「ImageMagick MemoryLeak」で検索したらすぐ見つかったから理不尽な難癖つけられる前にもっと早くやっていればよかったなぁ・・・) http://stackoverflow.com/questions/9993085/php-imagick-memory-leak マニュアル - メソッド (参考になるコメントあり) http://www.php.net/manual/ja/imagick.setresourcelimit.php http://php.net/manual/ja/imagick.getresourcelimit.php 定数一覧に 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で知ることが出来るのにちょっぴり不便ですね・・・

edo_1972
質問者

補足

回答ありがとうございます。 せっかく説明していただいて申し訳ありませんがPHP内ではコマンドを実行して画像を変換しているので・・・ 次、コマンドでの変換でなく、ImageMagickのクラスで変換する時は参考にさせていただきます。 では、失礼します。

noname#244856
noname#244856
回答No.2

>> 根本的に私の考え方が間違っていたのでしょうか。 >> PSDファイルをJPGに変換するのにImageMagickを使用しないのでしょうか。 もちろんいろいろな方法があるでしょう。 >> PHPでPSDを画像変換するに、どの方法が一般的なのでしょうか。 個人的には、ImageMagickがデフォルトでは使えない環境が多い一方、GDならばデフォルトで使える場合がほとんどなので、後者の方が一般的だと思います。 >> せっかくアドバイスいただいたのですが、できればImageMagickで変換したいと考えていますが・・・ >> 無理ならアドバイスいただいた方法を使用するようにプログラムを変更したいと考えます。 今回掲載させていただいた回答は、「psdファイルが200MBを超えると変換に時間がかかっているのか、止まっているのかわからず・・・」というのがImageMagickのせいなのかそうではなく単に処理が重いだけなのか判別するためのものです。 無理にGDを勧めているわけではありません。

edo_1972
質問者

補足

回答が遅くなってすみません。 アドバイスいただいたPHPのクラスをダウンロードして下記のサイトを参考にしてサンプルを作成しました。 http://phpspot.org/blog/archives/2009/06/photoshoppsdphp.html ダウンロードしたファイルを配置してブラウザで実行したらダウンロードしたクラスの内容とワーニングがブラウザに出力されてしまいました。 それでクラス内のコメントを全て削除してブラウザで再度、実行しました。 そしたら実行中のままになって処理されているのか、されてないのかわからない状況で・・・ こっちも200MBを超えるファイルは変換できないのでしょうか。 もしかしたらImageMagickとPHP PSD Readerなどの変換処理できるファイルサイズはきまっているのでしょうか。 またImageMagickとPHP PSD Readerを実行した際のログは残せたりできるのでしょうか。 申し訳ありませんがもう少し、私にお付き合い下さい。 皆さん、宜しくお願いします。

noname#244856
noname#244856
回答No.1

これで試してみてください。 http://www.kingsquare.nl/phppsdreader/ こちらでも同様に時間がかかるのであれば妥協するしかないですね。 もともと重い処理だと思われるので。

edo_1972
質問者

補足

回答ありがとうございます。 根本的に私の考え方が間違っていたのでしょうか。 PSDファイルをJPGに変換するのにImageMagickを使用しないのでしょうか。 PHPでPSDを画像変換するに、どの方法が一般的なのでしょうか。 せっかくアドバイスいただいたのですが、できればImageMagickで変換したいと考えていますが・・・ 無理ならアドバイスいただいた方法を使用するようにプログラムを変更したいと考えます。 どうか、再度ご教授いただけたら幸いです。 申し訳ありませんが宜しくお願いします。

関連するQ&A

  • ImageMagickでPSDを画像に変換する方法

    現在、im4javaというJavaからImageMagickを操作するライブラリを使用してPSDファイルの全てのレイヤーが統合された状態のイメージデータをjpgやpngなどの画像ファイルに変換する処理を書いています。 色々調べたところ、どうやらPSDファイルには全てのレイヤーが統合された状態のイメージデータが一番上のレイヤーとして保存されているらしく、コマンドライン上からなら以下のように0番目のレイヤーを指定して変換することで目的の統合された画像ファイルが得られることが分かりました。 convert src.psd[0] out.jpg しかし、im4javaから同じようなことをしようとして im4javaのドキュメントなどを探してみたのですが、 src.psd[0] のようにPSDファイルの一番上のレイヤーを指定する方法を見つける事ができませんでした。 どなたか、im4javaで一番上のレイヤー画像だけを指定して画像に変換する方法をご存知ではないでしょうか?

    • ベストアンサー
    • Java
  • 【PHP+ImageMagick】画像アップロード

    【PHP+ImageMagick】現在、PHP Version 5.1.6にて以下の事をしようとしています。 1画像のUPLOAD(move_uploaded_file関数) 2UPLOADした画像のサムネイル作成(ImageMagickのconvertコマンド) 「手順START」 ・00003.JPGをアップロード ・00003.JPGのサムネイル作成失敗。 ・サムネイル作成部のみを抽出したスクリプトにて00003.JPGに対してサムネイル作成を実行 ・サムネイル作成失敗 ・cp -p 00003.JPG 000033.JPG とし000033.JPGを作成 ・権限等を00003.JPGと同じ物とし修正。 ・サムネイル作成部のみを抽出したスクリプトにて000033.JPGに対してサムネイル作成を実行 ・サムネイル作成成功 「手順END」 convertコマンドにて標準出力に吐き出されたログを見ると、画像ファイルに対して「Permission denied」と出力されていました。 ちなみに、コマンドベースでのphp実行は問題なく処理されます。今回の現象はWebブラウザからのアクセス時のみに発生しています。 php.iniのセーフモードはOFFになっています。 この現象について、わかる方がいらっしゃいましたら教えて頂けないでしょうか?よろしくお願いします。

    • 締切済み
    • PHP
  • phpからImageMagickの使い方

    phpからexecでImageMagickを使いたいと思っています。ためしにjpgからgifに変換できればと思っています。 exec("/usr/bin/convert IMG_0.jpg a.gif",$output); var_dump($output); という感じでテストしています。 ファイルのパスが間違ってるのかとも思うんですが、うまくいきません。 画像ファイルのパスはexecを実行するphpファイルからの相対パスでよいのでしょうか? -versionは成功しているようです。 exec("/usr/bin/convert -version",$output); array(3) { [0]=> string(68) "Version: ImageMagick 6.4.3 2009-04-10 Q16 http://www.imagemagick.org" [1]=> string(57) "Copyright: Copyright (C) 1999-2008 ImageMagick Studio LLC" [2]=> string(0) "" }

    • ベストアンサー
    • PHP
  • ImageMagickでのバッチファイル作成方法

    ImageMagickでの処理を簡単にするためにバッチファイルを 作成しよう思います。 最初動くかどうかを確かめるために convert abc.jpg abc_1.png と記述したバッチファイルをabc.jpgの格納してあるフォルダで 実行したのですがうまく回りません。 コマンドプロンプトで上記を実行するとうまくいきます。 バッチファイルをどのように書き直せばうまくいくのでしょうか? ご教示の程よろしくお願い致します。

  • imagemagickのコマンド

    こんにちは。 画像のサイズ変更をしたいと思い、imagemagickをインストールしました。環境はubuntuです。 サイズ変更の場合はconvertコマンドのオプションの-geometryや-resizeを使うとできるとのことで試したのですが、 $ convert -geometry '320×480' test.jpg test_geo.jpg とすると convert: invalid argument for option `-geometry': 320×480 @ error/convert.c/ConvertImageCommand/1592. のようなエラーが出てしまいます。resizeの場合も同じです。 どうすればサイズ変更ができるのでしょうか。 もしくはimagemagick以外で画像のサイズを縮小、拡大できるお勧めのフリーソフトなりがありましたら教えてください。よろしくお願いします。

  • floatで保存したRAWファイルをImageMagickでconvertしたい

    0.0~255.0の輝度値で32ビットfloat型で保存したRAWファイルfloat.raw(256x4608)をImageMagickでconvertしてtifまたはgifファイルに変換したいのですが、うまくいきません。 convert -depth 32 -size 256x4608 gray:float.raw outimg.tif うまくいかないというのは、上のように実行してもImageMagickはエラーを返さず、 display outimage.tif の出力結果が意図していたものとは全然違うということです。 ちなみに、同じRAWファイルをプログラム処理して8ビットunsigned char型で保存したRAWファイルは、以下のコマンドでconvertでき、出力結果も正常です。 convert -depth 8 -size 256x4608 gray:unchar.raw outimg.tif どなたかお助けを~(>_<)

  • ImageMagick インストールについて

    WinXP SP2環境にてimagemagickをhttp://www.imagemagick.org/script/download.php ここからC:\にダウンロードしました。 そしてこのサイト(http://www.ss.iij4u.or.jp/~somali/web/_imagemagick.html) が示すように環境変数「MAGICK_HOME」と「PATH」にインストール先である「c:\imagemagick」を加えました。 上記のことをした後、コマンドプロンプトを開いて 「convert」とオプションを打って、インストールできているのか 確認したのですが、 「ファイルシステムを指定してください」と出ます。 また、上記サイトにあるように C:\imagemagick\PerlMagick\demo> perl demo.pl と実行しても 「perlは内部コマンド、外部コマンド、操作可能なプログラム またはバッチファイルとして認識されておりません。」 と表示されます。 これはどこがうまくいっていないのでしょうか? Pathの通し方が間違っているのでしょうか? どうかご教示の程よろしくお願い致します。

  • PHP 上で ImageMagick のコマンド convert が動

    PHP 上で ImageMagick のコマンド convert が動かなくて困っております。 どなたかご教授ください。よろしくお願いします。 OS CentOS PHP PHP5.1 症状 コマンドプロンプト上で実行した convert コマンドは実行できているのに、 同様のコマンドをexec関数にて実行しても実行できない。 safe_modeはoffになっております。 以上です。解決方法をご教授ください。 なにとぞよろしくお願いします。

    • ベストアンサー
    • PHP
  • JPG、PSD、AIファイルに配置の仕方

    デザインを業者?みたいなところに送りたいのですが、 JPG、PSD、AIファイルに配置して送りください と言われました。 JPG、PSD、AIファイルに配置の仕方を詳しく教えてください。

  • imagemagickとは何をどうしたら使えるようになるのでしょう・・・。

    コマンドラインとかソフトをダウンロードとかLinaxとか何がなんなのか訳がわかりません。(笑) ローカル上でわざわざimagemagickをインストールするなら普通はペイントなどで出来ますよね・・・(笑) 推測では多くの方のimagemagickを利用する理由は、サイト上でデータベースより抽出した $img.gif 等 又は直接のファイル名($img=diary21542.gif)等を 抽出後又は格納時に変換を行う目的が多いと思うのですが中々複雑に説明されているサイトが多くちょっとこれはどうなのかな・・・と思っていました。 php関数のみで使えるようなサイトもあればやたら複雑にダウンロード・インストール・Linaxがどうのある等記載のあるサイトもあります(笑) 要するに、とりあえず imagemagick と言うものはソフトでもなんでもなくただの関数なわけですよね・・・。 その関数を実行させるためには、コマンドプロンプトだったり、ソフトだったりclassファイルかなんかにプログラムを組むってだけの話ではないのですかね・・・。 画像を斜めにしたり赤の部分をぼかしたり等わあわあ書いてあるのはいいんですけどいまいち 無駄に複雑に書いているサイトが多すぎでややかしいですね・・・。

    • ベストアンサー
    • PHP

専門家に質問してみよう