質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

ImageMagick

ImageMagickとは、画像の表示や操作を行うオープンソースのソフトウェアです。プログラムはCで書かれており、GIFやJPEG、PDFなど画像ファイルフォーマット100種類以上に対応しています。

Q&A

解決済

2回答

2299閲覧

iImageMagickを使い、画像を円柱状に変形したい

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

ImageMagick

ImageMagickとは、画像の表示や操作を行うオープンソースのソフトウェアです。プログラムはCで書かれており、GIFやJPEG、PDFなど画像ファイルフォーマット100種類以上に対応しています。

0グッド

1クリップ

投稿2016/06/16 08:10

編集2016/06/16 09:30

###前提・実現したいこと
ImageMagickのcylinderizeというBashスクリプトを使用し、画像を円柱状に変形したいです。
BashスクリプトDLページ(http://www.fmwconcepts.com/imagemagick/cylinderize/index.php)
ダウンロードしたスクリプトを、反映させたいphpと同じ階層のディレクトリに入れました。
###質問前

exec("./cylinderize \folder img/mag02.jpg -m vertical \folder img/cup1.png \folder img/mag04.jpg");

としていますが、画像は生成されません。
なにかご存知の方、どうぞよろしくお願い致します・
###現在

<?php system("./cylinderize -m vertical -r 73 -l 120 -w 90 -p 5 -n 94 -e 2 -s 200 -a 100 -v background -b none -f none -o +24+10 img/cup1.png img/mag02.jpg img/mag04.jpg"); var_dump( $system ); ?> <img src="img/mag02.jpg"> <img src="img/cup1.png"> <img src="img/mag04.jpg">

現在表示されるエラーはNULLです
------補足------
ロリポップレンタルサーバーを使用しています。
execは許可されており、通常ImageMagickはexec('/usr/bin/convert...で使用しています。
今回新たにスクリプトを使用するため、同じ階層に入れました。
画像が表示されないだけでなく、そもそも画像生成ができていません。
他サイトの同じ質問です。→ http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12160381512

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

知恵袋のほうでも指摘しましたが,\folderは明らかにおかしいので

php

1"./cylinderize \folder img/mag02.jpg -m vertical \folder img/cup1.png \folder img/mag04.jpg"

php

1"./cylinderize -m vertical img/mag02.jpg img/cup1.png img/mag04.jpg"

また,エラーが出ているはずなので確認しましょう.とりあえずはsystem関数にすると結果が全部流れてくるのでデバッグしやすくなります.

php

1system("./cylinderize -m vertical img/mag02.jpg img/cup1.png img/mag04.jpg");

追記: 2016/06/16 17:43

私が提示したコードで実行すると,とりあえず画像が生成されるところまではできました.こんな画像が作られました.
イメージ説明

オプションの設定を例の通りに適切に行なった結果,期待した画像が生成されました.テクスチャ画像とマグカップ画像の順番は逆でしたね.

bash

1./cylinderize -m vertical -r 73 -l 120 -w 90 -p 5 -n 94 -e 2 -s 200 -a 100 -v background -b none -f none -o +24+10 img/cup1.png img/mag02.png img/mag04.png

実際には細かいパラメータを画像に合わせて調節する必要があるでしょう.

イメージ説明

なお,画像とファイル名はこのように対応しています.

  • img/cup1.png → マグカップ
  • img/mag02.png → テクスチャ (質問本文ではjpgでしたがpngに変更しています)
  • img/mag04.png → 出力された画像 (質問本文ではjpgでしたがpngに変更しています)

イメージ説明

投稿2016/06/16 08:32

編集2016/06/16 09:22
mpyw

総合スコア5223

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/06/16 08:35

ご回答ありがとうございます! ご教授くださった通り記述しましたが、画像が生成されないのです..
mpyw

2016/06/16 08:36

system関数ならうまくいかない場合エラーが絶対に流れてくるはずなので,結果を見せてください.
退会済みユーザー

退会済みユーザー

2016/06/16 09:14

なんてこった・・・ ありがとうございます、希望は持てました。 var_dump( $system );すると、 --- NO OUTPUT FILE SPECIFIED --- NULL とでました。 ダウンロードしたcylinderizeは編集せず、そのままphpと同じディレクトリに入れました。そしてパーミッションは777にしてあります。
mpyw

2016/06/16 09:19

実行はできていますね.「出力ファイルが指定されていない」というエラーなので,ファイル名の指定が足りないとかじゃないでしょうか?最後に実行したコードを質問本文に反映させてください.
退会済みユーザー

退会済みユーザー

2016/06/16 09:27

すみません、ファイルパスをコピペしたままでしたので、パスを間違えたまま実行していました。 現在直し、 <?php system("./cylinderize -m vertical -r 73 -l 120 -w 90 -p 5 -n 94 -e 2 -s 200 -a 100 -v background -b none -f none -o +24+10 img/cup1.png img/mag02.jpg img/mag04.jpg"); var_dump( $system ); ?> <img src="img/mag02.jpg"> <img src="img/cup1.png"> <img src="img/mag04.jpg"> としてあります。エラーはNULLとだけ表示されるようになりました。
mpyw

2016/06/16 09:40 編集

systemは結果を直接出力する関数なので,返り値は特に気にしなくていいです. (NULLはエラーではないと思います) エラーコードを直接見たほうが良さそうなので,以下のコードに変えてみてください. <?php function h($str) { return htmlspecialchars($str, ENT_QUOTES, 'UTF-8'); } exec("2>&1 ./cylinderize -m vertical -r 73 -l 120 -w 90 -p 5 -n 94 -e 2 -s 200 -a 100 -v background -b none -f none -o +24+10 img/cup1.png img/mag02.jpg img/mag04.jpg", $out, $status); ?> <p style="color: red;"><?=h($status)?></p> <p style="white-space: pre; color: blue;"><?=h(implode("\n", $out))?></p> <img src="img/mag02.jpg"> <img src="img/cup1.png"> <img src="img/mag04.jpg">
退会済みユーザー

退会済みユーザー

2016/06/16 09:40

横から失礼します、ロリポップは777禁止なので700で試したほうがいいかもしれません。
mpyw

2016/06/16 09:41

@hide2e3r 貴重な情報ありがとうございます!
退会済みユーザー

退会済みユーザー

2016/06/16 09:56

どうもありがとうございます。 convert: unrecognized option `-clamp'. と表示されるようになりました。 変更点はご教授くださったコードへ変更したこと、cylinderizeのパーミッションを700とした点です。
mpyw

2016/06/16 12:54 編集

https://github.com/ellzey/imagemagick/blob/master/ChangeLog#L4108 これによると,-clampはバージョン6.5.6-5から利用できるオプションのようです.2009年09月25日の変更なので,ロリポップのImageMagickが予想以上に古いことがわかります. https://www.jpcert.or.jp/at/2016/at160021.html 最近,上記のようにImageMagickに深刻な脆弱性が見つかっているので,これは一刻も早くサーバ管理者に連絡して対応してもらうべき問題です.セキュリティを考慮すると,バージョンアップが必須です. セキュリティ問題はさておき,バージョンアップされない限りはこのサーバでcylinderizeは実行できません.
退会済みユーザー

退会済みユーザー

2016/06/16 14:44

そういうことだったのですね.... 問い合わせてみます。 長らくお付き合いいただき、本当にどうもありがとうございました。
guest

0

お使いのサーバーでexecは許可されていますか?
レンタルサーバーの場合禁止となっているケースがあります。

許可されているのを確認した上で・・・
動作しない場合なんらかのエラーログが出力されているかと思うのでそちらも質問に追記されたほうが良いかと思います。


検証するには環境を用意するのが厳しいのでマニュアルみて気になった点を

exec("./cylinderize -m vertical /サーバーの絶対パス/img/mag02.jpg /サーバーの絶対パス/img/cup1.png /サーバーの絶対パス/img/mag04.jpg");

と-mを最初に指定してみはどうでしょうか。

ただこれWEB上のマニュアルみると初期値がhorizontalってなってますけど、cylinderize内のマニュアルと初期値はverticalになっているので-m自体を外してしまってもいいかと思います。

\folderはちょっと何を指しているのかわかりませんので上記では省いていますが、必要なものであれば説明をいただければと

投稿2016/06/16 08:14

編集2016/06/16 08:41
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/06/16 08:17

ロリポップレンタルサーバーを使用しています。 execは許可されており、通常ImageMagickはexec('/usr/bin/convert...で使用しています。 今回新たにスクリプトを使用するため、同じ階層に入れました。 画像が表示されないだけでなく、そもそも画像生成ができていません。
退会済みユーザー

退会済みユーザー

2016/06/16 08:49

追記しましたがmpywさんと被ってます(というより下位互換な)ので-mの初期値が実際はverticalってとこだけみておいて下さい。
退会済みユーザー

退会済みユーザー

2016/06/16 09:16

ありがとうございます。 \folderは画像の指定パスだと考えていましたが、違うとご教授いただきました。 -mを外しても表示されませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問