public function imagescale_output($image_path,$save_path,$width,$height,$aspect_fill = true,$strict_size_on_aspect_fit = true,$space_color = array('r'=>255,'g'=>255,'b'=>255))
{
if(!is_readable($image_path))
return false;
$o_img = $this->imagecreate($image_path);
$o_w = imagesx($o_img);
$o_h = imagesy($o_img);
$w_ratio = $width / $o_w;
$h_ratio = $height / $o_h;
$ratio = $aspect_fill ? max($w_ratio,$h_ratio) : min($w_ratio,$h_ratio);
$new_w = round($o_w * $ratio);
$new_h = round($o_h * $ratio);
if(function_exists('imagescale')){
$new_img = imagescale($o_img,$new_w,$new_h);
}else{
$new_img = imagecreatetruecolor($new_w, $new_h);
imagecopyresampled($new_img, $o_img, 0, 0, 0, 0, $new_w, $new_h, $o_w, $o_h);
}
$param = $aspect_fill ? array('x' => round(abs($width - $new_w) * 0.5), 'y' => round(abs($height - $new_h) * 0.5), 'width' => $width, 'height' => $height) : array('x' => 0, 'y' => 0, 'width' => $new_w, 'height' => $new_h);
if(function_exists('imagecrop')) {
$dest_img = imagecrop($new_img, $param);
}else{
$dest_img = imagecreatetruecolor($param['width'], $param['height']);
imagecopy($dest_img, $new_img, 0, 0, $param['x'], $param['y'], $param['width'], $param['height']);
}
imagedestroy($new_img);
if(!$aspect_fill && $strict_size_on_aspect_fit){
$next_img = imagecreatetruecolor($width,$height);
imagefill($next_img,0,0,empty($space_color) ? imagecolorat($dest_img,round($new_w*0.5),0) : imagecolorallocate($dest_img,$space_color['r'],$space_color['g'],$space_color['b']));
imagecopy($next_img,$dest_img,round(abs($width - $new_w) * 0.5),round(abs($height - $new_h) * 0.5),0,0,$param['width'],$param['height']);
$success = $this->imageoutput($next_img,$save_path);
imagedestroy($o_img);
imagedestroy($next_img);
imagedestroy($dest_img);
}else {
$success = $this->imageoutput($dest_img, $save_path);
imagedestroy($o_img);
imagedestroy($dest_img);
}
return $success;
}