WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:convertを使いたいがパスがとおらない

0:[投稿] eguyan [MAIL] [2005/01/19 04:23 ][環境:winXP,IE6 redhat linux]

プロバイダ(ロリポップ)のサーバにインストール済のImageMagicを使って、画像の縮小をしたいと思っていますがうまくいきません。

/usr/bin/convertを使うために、
/usr/bin/convert image1.jpg -thubnail 80*80 image2.jpg
という感じで設定したのですが、いくら設定しても"CGIエラー"の画面が出るだけです。convertの上記パスはプロバイダ確認済なので、当方の設定でパスが通っていないものと思われるのですがわかりません。

ちなみに、ユーザーのフォルダとしてはルートの下にフォルダ1を設定して、その下に上記を記述したcgiを置いています。そこで../usr/bin/convertなどとしてもみましたがダメでした。
基本的な質問でしたら恐縮ですが、どなたかお助けください。


1:[回答] Iwa [URL] [2005/01/19 13:54 ]

画像の縮小にはImage::Magickを使うんじゃなかったのでしょうか?
何かこれを見るとconvertを使って縮小しようとしているようですが・・・。

それはさておき、convertの呼び出し方はどのように(どの関数を使って)行っているのでしょうか?
(open、system、等)

> ../usr/bin/convert

これは自身からみてひとつ上のディレクトリ以下の/usr/binを指すことになります。
ルート見て/usr/bin/convertなら書き方も/usr/bin/convertのままが正しいです。


2:[回答] eguyan [MAIL] [2005/01/20 21:05 ]

回答頂き感謝感激です。

>画像の縮小にはImage::Magickを使うんじゃなかったのでしょうか?

そうなんです。イメージマジックを使いたいのですが、そのうちのコマンドの一つがconvertだと思っているのですが、根本的に勘違いしてますか?webで調べるとconvertを使ったコマンドライン
での変換方法がたくさんありました。先に、
use Image::Magick
とかしてもうまくいきません。convertを使うに先立って、何かあらかじめしかるべき設定があるのでしょうか。ご存知でしたら教えてください。


3:[回答] B-Cus [2005/01/20 21:45 ]

> 根本的に勘違いしてますか?

いいえ。

ImageMagick 付属の convert コマンドを使ってもいいし、
ImageMagick 付属のライブラリを使用する Image::Magick
モジュールを使ってもいいです。お好きな方をどうぞ。


4:[回答] eguyan [MAIL] [2005/01/20 22:25 ]

B-Cusさん回答ありがとうございます。
/usr/bin/convert
以降のパラメータ表記に問題ある以外考えられないようですね。また何か心当たりがありましたら教えてください。どうもありがとうございました。


5:[回答] gun [2005/01/20 22:42 ]

convertを呼び出している部分を
CGIから抜粋してご提示されると
何かわかる方がおられるかもしれません


6:[回答] eguyan [MAIL] [2005/01/20 23:18 ]

gunさん回答ありがとうございます。
下記表記で表示しません。

/usr/bin/convert $LDATA{'img_location'} -thumbnail 200x200 image.jpg;

ちなみに、$LDATA{'img_location'}をimage.gifとかにしても同じ状態です。


7:[回答] AC1号 [2005/01/20 23:59 ]

>>6
えっと、だからそれをopen、system、等で呼び出していると思うのですが、open、system関数は使っていないのですか?

#もしかして/bin/shでCGI書いているとか?


8:[回答] eguyan [MAIL] [2005/01/21 00:16 ]

あっ、きっとそこなんです!!すいません、なにも使ってません(^^;;
そもそもがプログラミングわかっていないんですが(^^;フリーで入手したものをみようみまねで改変しようとしていて、いきなりconvertコマンドを使っているんです....すいません、「呼び出す」というあたりを教えてもらえませんか。みようみまねで書いてみますのでm(_ _)m


9:[回答] gun [2005/01/21 17:45 ]

まずは、eguyanさんがCGIを作られている言語は何でしょうか?
Perl?Ruby?csh?sh?
それにより、回答が違ってきます。


10:[回答] gun [2005/01/21 18:27 ]

@Niftyなら、Perlかshですね。
CGI内から実行しているなら、いずれにしてもも、
画像ファイルにもパスを付けねばいけません。
(パスの意味がわからなければ、デジタル用語辞典で検索してください)

/usr/bin/convert [パス]/image1.jpg -thubnail 80*80 [パス]/image2.jpg


11:[回答] eguyan [MAIL] [2005/01/21 20:06 ]

gunさん回答ありがとうございます。言語はPerlです。
とりあえず動くことを確認したいので、CGI実行ファイルと同じフォルダに暫定的にimage.jpgというファイルを作っておいています。ですからパスは不要でいいですよね?ちなみに、本番のときは $LDATA{'img_location'} というのを使うのですが、これにはパスの情報も含まれています。

ところで肝心な情報を伝えていなかったかも...

htmlファイルを処理する下記の部分があるのですが(簡略化して書いてます)、

<a href="image2.jpg" target="top"><img src="image1.jpg"></a>

ここでWEB上で表示されているimage1.jpgをクリックすると、convertで処理されたimage2.jpg画像が出るようにしたいのですが、そのために先のコマンドを書いています。これを、このhtmlファイルを処理する部分の前に書き込んでいるのですが、このあたり問題ありませんか?


12:[回答] gun [2005/01/22 01:18 ]

>11
eguyanさんが作られているCGIがどういうものか分からないので、
html部分をどうすれば良いかは回答できませんが、
system は下のようになります。

system "/usr/bin/convert image1.jpg -thumbnail 200x200 image2.jpg" or die "convert err";


13:[回答] eguyan [MAIL] [2005/01/22 15:11 ]

gunさんありがとうございます。まさにお伺いしたかったのはそのコマンドと使い方でした。ありがとうございます。おかげでCGIファイルをちゃんと読み込むようになりました。

しかし、なかなか甘くないものです。
cgiを立ち上げて、変換した画像を html表示部分で指定すると、あらためてcgiエラーになりました。ここから先はImageMagicKの問題だと思うのですが、変換後あらためてファイルを保存しないと、こういう場合はダメなのでしょうか。差し支えなければそのあたりもご示唆頂けるとありがたいのですが。

ちなみに下記のように使っていて、cgi画面で”photo”をクリックするとcgiエラー画面になります。

system "/usr/bin/convert $www/$year/$GrpFileName -thumbnail 120x180 $www/$year/$GrpFileName2";
・・・(省略)
print "<a href=\"$www/$year/$GrpFileName2\">photo</a>";


14:[回答] AC1号 [2005/01/22 15:33 ]

>ちなみに下記のように使っていて、cgi画面で”photo”をクリックするとcgiエラー画面になります。
そんなはずはありません。$www/$year/$GrpFileName2はCGIファイルではないはずなので、この状況で「CGIエラー」が起こることはあり得ません。正確に状況を書いて下さい。


15:[回答] eguyan [MAIL] [2005/01/22 18:50 ]

AC1号さん、ご回答ありがとうございます。

おっしゃるとおり、よくよく見たらCGIエラーではありませんでした。すいません。

403 Error - Forvidden

と表示されて、「指定されたページ(URL)へのアクセスは禁止されています。」と出ています。携帯画面用の処理のために小さい画面で確認したため思い込みで書いてしまいました。失礼しました。

これはやはり事前に $www/$year/$GrpFileName2 の保存の処理が必要ということになるでしょうか。


16:[回答] AC1号 [2005/01/22 20:47 ]

ファイルが存在しない場合、lolipopでは404 Not Foundになるので、ファイル自体は作成されている、ということになります。
できたファイルのパーミッションを確認して下さい。


17:[回答] eguyan [MAIL] [2005/01/22 21:34 ]

>ファイルが存在しない場合、lolipopでは404 Not Foundになるので、ファイル自体は作成されている、ということになります。

なるほど納得。しかし、ファイルは生成されていないのです。


18:[回答] AC1号 [2005/01/22 21:48 ]

CGIを実行してブラウザに表示させ、ブラウザの「ソースを確認する」機能を使って
<a href=\"$www/$year/$GrpFileName2\">photo</a>
に相当する部分がeguyanさんの意図する通りのURLになっているかどうか確認してみて下さい。


19:[回答] eguyan [MAIL] [2005/01/22 22:16 ]

ご指南ありがとうございます。

この処理は、先にも書いたのですが「携帯画面用の処理」になるので、パソコンのブラウザからは確認できないんです。携帯(auですが)では見れないようなんです。

しかしもしファイルがどこかに生成されていたとして(存在しないのは確認していますが)、どんなファイルネームになるのでしょう?何の定義もしていないので...と素人判断で疑問に思っていたりしてます...


20:[回答] AC1号 [2005/01/22 22:52 ]

>この処理は、先にも書いたのですが「携帯画面用の処理」になるので、パソコンのブラウザからは確認できないんです。携帯(auですが)では見れないようなんです。
携帯向けといっても、HTMLを出力している(今までの投稿を見る限り、そうとしか解釈できない)ので、パソコンでは確認できない、というのは、意図的にアクセス制限などをしていない限りあり得ません。意図的にアクセス制限をしているのであれば、解除した上でテストして下さい。ソースが確認できないような状況では、お手上げです。

ファイルは $www/$year/$GrpFileName2 にあるはずです。


21:[回答] eguyan [MAIL] [2005/01/23 11:55 ]

確かにHTMLだと思うのですが、CGIファイル内でiMODE等の携帯からアクセスしたときには、そちら用の処理に分岐するようになっているようで、PCから表示したときのソースとは違うようなのです。しかし、ご指摘いただいている点に関してもう少し何か手がかりがないかいろいろ調べてみたいと思います。


22:[回答] gun [2005/01/24 23:42 ]

そういう状況の場合には、下の様なコードを追加し、
変数内容をテキストファイルに出力して、
内容を確認してください。

$OUT_FILE='./out.txt';
open OUT, ">>$OUT_FILE" or die "sequence file: $!";
print OUT "$www/$year/$GrpFileName2\n";
close (OUT);

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]

ChaichanPAPA's World