PHP jpeg画像の表示1
PHP でjpegファイルを読み、サイズの変更、切り取りなどの処理をした後表示させる。
jpegファイルを読み込み、一部を切り取り表示する
- 画像に関する関数は見ているだけでも面倒であるが、それほど難しいことはない。座標の表示をきちんと追いかけていけば何をしているのか見えてくる。。と思う。しかし、何も知らない初心者(私のことだ)にとってはそれに時間がかかる(笑)。
- とりあえず、スクリプトはこれ。
<?php list($width, $height, $type, $attr) = getimagesize("map.jpg"); $image_base_map = imagecreatefromjpeg("map.jpg"); $image_out_map = imagecreate( $width/10,$height/10); imagecopy($image_out_map, $image_base_map, 0, 0, 0, 0, $width/10,$height/10); imagejpeg($image_base_map,"old_map.jpg"); imagejpeg($image_out_map,"new_map.jpg"); imagedestroy($image_base_map); imagedestroy($image_out_map); ?> <img src = "new_map.jpg" border="0"> <img src = "old_map.jpg" border="0">
- 今回は、地図データの表示をしたかったので、元の画像ファイル名がmap.jpgとなっている。これをスクリプトを同じディレクトリに置いておく。あまり正確ではないが、自分のメモがわりに説明を試みてみる。
getimagesize()
list($width, $height, $type, $attr) = getimagesize("map.jpg");
getimagesize()関数で、map.jpgのサイズを取得している。取得した結果はこの場合、$width(幅)、$height(高さ)などの変数に入ることになる。
imagecreatefromjpeg()
$image_base_map = imagecreatefromjpeg("map.jpg");
imagecreatefromjpeg()関数で、map.jpgを変数$image_base_ma読み込み、php内部で扱うjpegファイルを作る。
imagecreate()
$image_out_map = imagecreate( $width/10,$height/10);
imagecreate()関数で、指定したサイズの変数$image_out_mapを作る。これは、まだ中身がないので、表示しても真っ黒の四角が出てくるだけ。ここでは元のmap.jpgサイズの1/10のサイズにしている。引数はx,yの二つだけ。まだ単純である。
imagecopyresized()
imagecopy($image_out_map, $image_base_map, 0, 0, 0, 0, $width/10,$height/10);
imagecopy()関数で、画像を切り取りながらphpの変数から変数へコピーしている。パラメーターは順に(コピーする側の変数名、コピーされる側の変数名、コピーする側の始点座標x,y、コピーされる側の始点座標x,y、切り取る大きさx,y)となる。ああ面倒!。ここで、x,yはピクセル単位。座標は画面の左上が0.0となる。また、元のサイズの1/10の大きさだけ切り取っている。
imagejpeg()
imagejpeg($image_base_map,"old_map.jpg"); imagejpeg($image_out_map,"new_map.jpg");
imagejpeg()関数で、新たにphp変数からjpegファイルを作る。これはカレントディレクトリに書き込まれるみたいなので、二つのファイルがjpegファイルとして残る。また、この二つのファイルを作ったユーザーはapacheとなるので、ファイルが入るディレクトリのパーミッションをそれなりに設定する。
imagedestroy()
imagedestroy($image_base_map); imagedestroy($image_out_map);
imagedestroy()関数で、変数を開放しておく。(メモリを食うので)
HTMLで表示
<img src = "new_map.jpg" border="0"> <img src = "old_map.jpg" border="0">
あとは普通にHTMLで表示させる。
jpegファイルを読み込み、サイズを変えて表示させる
<?php list($width, $height, $type, $attr) = getimagesize("map.jpg"); $image_base_map = imagecreatefromjpeg("map.jpg"); $image_out_map = imagecreate( $width/10,$height/10); imagecopyresized($image_out_map, $image_base_map, 0, 0, 0, 0, $width/10,$height/10, $width, $height);実際には1行 imagejpeg($image_base_map,"old_map.jpg"); imagejpeg($image_out_map,"new_map.jpg"); imagedestroy($image_base_map); imagedestroy($image_out_map); ?> <img src = "new_map.jpg" border="0"> <img src = "old_map.jpg" border="0">
imagecopyresized()
- 切り取りと違うのはここだけ。この関数は、サイズを変えながらphpの内部ファイルどうしでコピーする。
imagecopyresized($image_out_map, $image_base_map, 0, 0, 0, 0, $width/10,$height/10, $width, $height);実際には1行
パラメーターは順に(コピーする側、コピーされる側、コピーする側の始点座標x,y、コピーされる側の始点座標x,y、コピーする側の大きさ<ピクセル単位>x,y、コピーされる側の大きさx,y)となる。ああ面倒!ここでは、始点左上から元のすべての画像を、それぞれ1/10に縮小して新たに画像を作っている。