width, $this->height, $this->type ) = GetImageSize($filename); $this->filename = $filename; $this->state = TRUE; } } } /** ステータス */ function state() { return $this->state; } /** * 画像の大きさの比率を変更する * * $height が省略された場合 アスペクト非を維持する */ function scale($width, $height=NULL) { if ($height === NULL) { $ratio = $this->_calc_ratio($this->width, $width); list(, $height) = $this->_size_adjust($ratio); } return $this->_scale($width, $height); } /** * scale で処理したデータをファイルに書き出す * * $image_type が指定された場合、保存形式を強制指定する。 * 0: GIF (No support) * 1: JPEG (set_jpeg_quality で保存時の品質を指定できる) * 2: PNG */ function save($filename, $image_type=NULL) { $save_type = $image_type===NULL ? $this->type : $image_type; $flag = FALSE; if ($this->image_id) { switch ($save_type) { case 1://GIF break; case 2://JPEG if (ImageJPEG($this->image_id, $filename, $this->jpeg_quality)) { $flag = TRUE; } break; case 3: if (ImagePNG($this->image_id, $filename)) { $flag = TRUE; } break; } } if ($flag) { ImageDestroy($this->image_id); } return $flag; } /** * JPEG で保存するときの品質 * * 0 <= $quality <= 100 * 引数が指定されなかった場合は現在の値を返す */ function set_jpeg_quality($quality=-1) { if ($quality >= 0 && $quality <= 100) { $this->quality = $quality; } else { return $this->quality; } } function _scale($width,$height) { $flag = FALSE; $im = @ImageCreateTrueColor($width, $height); if (!$im) { $im = ImageCreate($width, $height); } $load_im = FALSE; switch ($this->type) { case 1:// GIF break; case 2://JPEG $load_im = ImageCreateFromJPEG($this->filename); break; case 3://PNG $load_im = ImageCreateFromPNG($this->filename); break; } if ($load_im) { if ($this->_resize($im, $load_im, $width, $height)) { $this->image_id = $im; $flag = TRUE; } } if ($flag) { ImageDestroy($load_im); } return $flag; } function _resize($dest_im, $src_im, $width, $height) { $result = @ImageCopyResampled( $dest_im, $src_im, 0, 0, 0, 0, $width, $height, $this->width, $this->height ); if (!$result) { $result = ImageCopyResized( $dest_im, $src_im, 0, 0, 0, 0, $width, $height, $this->width, $this->height ); } return $result; } /** * サイズの調整 */ function _size_adjust($ratio) { return Array( $this->width * $ratio, $this->height * $ratio ); } /** * 比率の計算 */ function _calc_ratio($from, $to) { return $to / $from; } }