CGI-BBS > CGI > Perl > 画像アップロード時に画像の縦・横のサイズを取得したい。


カレッヂ
カレッヂ


質問者 siki  投稿日 2005/1/17(月) 11:23:13
画像アップロードCGIを作成しています。
縦横サイズが一定サイズを超える画像の表示を調整するために
画像の転送時に、画像の縦サイズ、横サイズを取得したいのですが、
方法がわかりません。
転送する画像の拡張子はJPEG、GIF、PNGの3種類のみの予定です。
CGI設置サーバはwakwakとniftyを利用しております

ご存知でしたら、ぜひ教えてください。
宜しくお願いいたします。

【習熟度】(未選択)

回答者 まさ  [削除]  投稿日 2005/1/17(月) 19:15:31
Image::Magickと言うモジュールを使うとできますが、ただ単に大きさ知りたいだけなら
もっと簡単な関数があります。しかし実際に縮小する場合はやはりモジュール使って画像
サイズを小さくしないと見かけの大きさだけなら大量に表示するとナローではツライです
ね。

しかしこの関数、ちょっと出所不詳で公に公開するのは控えたいのでメールでならお教え
します。
回答者 いのちゃん  [削除]  投稿日 2005/1/18(火) 03:50:36
画像の限定設定法として以下の2つのurlにそれぞれの方法を記して見ました。
1つ目はwidth 及び height による設定の方法であり、
2つ目は水平方向(H):50%→垂直方向(V):50%の%の値の設定方法であります。
ご参考になれば幸いです。

http://www.kcb-net.ne.jp/ki-net/index8.html (画像の部屋) 
<a href="bridge.jpg"><IMG src="bridge.jpg" width="50" height="40"><b>橋の写真</a></b><br>
width 及び height による設定の場合。

http://www.kcb-net.ne.jp/ki-net/page2_0.html (油彩肖像画・マイ・ギャラリー)
スタート→エクスプローラ(X)→C:\Pals\pict0001(反転)→編集(E)→pict001-ペイント→
変形(T)→伸縮と傾き(S)→水平方向(H):50%→垂直方向(V):50%→ファイル(F)→上書き保存(S)
回答者 すっとこ君  [削除]  投稿日 2005/1/25(火) 12:16:58
はじめまして。

http://www.big.or.jp/~talk/t-club/soft/disp_20/in_sl.cgi
WebAlbumのサブルーチン(imgsize.pl)にて簡単に取得できます。

CGIにて、

$imgsize_prog ='imgsize.pl';

if(-e "$imgsize_prog"){
	require "$imgsize_prog";
}

print "Content-Type:text/plain\n\n";

&imgsize("./test.jpg");

print $IMGSIZE{'height'};
print $IMGSIZE{'width'};

これだけでOKです。

あと、逆に質問なのですが、画像のアップロードがいまいちわかりません。
よろしければ、簡単なサンプル等で教えて頂けないでしょうか?

例として、CGIと同じディレクトリで「test.jpg」を読み込み、
同ディレクトリ内で「test1.jpg」としてアップロードする。
(コピーなのかな・・・)

宜しくお願い致します。
回答者 いのちゃん  [削除]  投稿日 2005/1/25(火) 14:45:52
>あと、逆に質問なのですが、画像のアップロードがいまいちわかりません。
>よろしければ、簡単なサンプル等で教えて頂けないでしょうか?

http://www.kcb-net.ne.jp/ki-net/imgbbs_1.34/imgbbs.cgi
画像の表示には幾つか方法があります。以下にその例をお示ししますと、

1.bg.gif これは背景画として四角の升目を表示した場合ですがその階層図は以下の通りです。
  imgbbs_1.34<777>
        |--imgbbs.cgi<755>
        |--
        |--
        |--bg.gif<644> (Binaryでupする)

2.LOG Analyer v1.06 及び spin.gifの場合はLine74の$message = <<'EOF';から
  Line79のEOFまでの間に書き込む場合です。

$message = <<'EOF';		# 掲示板上部に挿入する文章。(HTML書式で) 
次の行からEOFの間に書くこと。
<h1 align=center>新型・簡易BBS imgbbs_1.34</h1>

<b><font color=red>(ようこそ いのちゃんの掲示板へ)</b></font>  
<b><a href=http://www.kcb-net.ne.jp/ki-net/ana106/index.shtml> LOG Analyer v1.06</a></b><br> 
<img src="http://www.kcb-net.ne.jp/ki-net/spin.gif" align=right>
EOF


回答者 すっとこ君  [削除]  投稿日 2005/1/25(火) 15:37:19
質問内容が説明不足だった様で申し訳御座いません。

手動にてサーバーにアップロードや表示方法はわかるのですが、
CGIでのアップロードのやり方がよくわかりません。

$img = ????

open(OUT, ">./test1.jpg"); 
binmode(OUT); 
print(OUT $img); 
close(OUT); 

このやりかたで、$imgに画像のデータを入れると思うのですが、
test.jpgの画像データを$imgに代入するにはどうしたらよいのでしょうか?

もしかしたら的外れなことを言ってるかもしれませんが、
宜しくお願い致します。
回答者 いのちゃん  [削除]  投稿日 2005/1/25(火) 16:36:27
cgiの中にプログラムを書くとすればどうなりますか?と言う意味かと存じますが。
これは当方は分かりません。申し訳ないですが...。

但し似たようなものとしてhtmlの中に書き込むことは可能です。

http://www.kcb-net.ne.jp/ki-net/index7.html (中ほどの“ホームページの内容”の
右側の当方の写真の上にカーソルを移動した場合、写真が変更になる)

<head>
<SCRIPT LANGUAGE="JavaScript">
function WindowOpen(){
open("home6baa.html","window1",
"toolbar=no,height=80,width=60");
}
</SCRIPT>
</head>

<body>
<p>
onMouseOver="if(navigator.appVersion.substring(0,1)>=3)document.images['button'].src='kimihar3.gif';"
onMouseOut="if(navigator.appVersion.substring(0,1)>=3)document.images['button'].src='kiright2.gif';">
<IMG NAME="button"SRC="http://www.kcb-net.ne.jp/ki-net/kiright2.gif" width="125" height="123" align="right" 
BORDER=0 onMousedown="mdown(event);" onMouseup="mup(event);"></a><br>
</body>
質問者 siki  [削除]  投稿日 2005/1/27(木) 14:45:20
CGIで画像などのアップロードを行う時には、
http://www.rescue.ne.jp/CGI-BBS/cgi/perl/20021107182034.shtmlで紹介されているような、
CGIモジュールを利用すると簡単に変数にデータを格納することができます。
モジュールが利用できない場合には、cgi-lib.plなどのライブラリを用いることもできます。

フォームのデータをマルチパートフォームデータとして扱い実行するものです。
通常、わたしたちが利用しているフォームは、application/x-www-form-urlencodedという形式です。
これは省略してもかまわないため、普段の利用で<form>タグの中には記述されません。
マルチパートフォームデータを扱い場合には、<form>タグの中に、
ENCTYPE="multipart/form-data;"を追加し、デコードを行います。

デコードソースは、少々長いものですので
こちらに記述するのは控えさせていただきます。
質問者 siki  [削除]  投稿日 2005/2/4(金) 15:44:51
まず、画像の縦横サイズの取得についてですが、教えていただいたimgsize.plで調整することができました。
みなさんありがとうございます。

そして、もうひとつ、

open(OUT, ">./test1.jpg"); 
binmode(OUT); 
print(OUT $img); 
close(OUT);
のとき、$imgに画像のデータを格納する方法ですが、
次のURLはかなりの簡易版ですが、アップローダのスクリプトです。
作り途中のファイルですので、不備もあるかと思いますが、興味のある方はご覧ください。
スクリプト:http://park21.wakwak.com/~cgi_labo/up_load.txt
上記動作中CGI:http://park21.wakwak.com/~cgi_labo/cgi-bin/labo/upfile/up_load.cgi

返信(回答)する

 


Web裏技