php 图片生成缩略图方法,php生成缩略图的两种方法(代码)

PHP是最近的热门语言,那么如果php要生成缩略图有什么办法呢?其实php生成缩略图有两种方法,核心代码如下,更多消息请关注应届毕业生网!

public function getImage(){

// create instance

$basePath = base_path('public/');

$md5 = 'b8c3bf0b10a81c5b6a98c527868a0000';$sub1 = substr($md5, 0, 1);$sub2 = substr($md5, 1, 2);

$subPath = sprintf("image/%s/%s/%s%s.jpg", $sub1, $sub2, $md5, '300x300');$sourcePath = sprintf("image/%s/%s/%s.jpg", $sub1, $sub2, $md5);//截成100x80的缩略图//$image = $this->getCropper($basePath.$sourcePath,$basePath.$subPath, 300, 300);$image = $this->getCrops($basePath.$sourcePath,$basePath.$subPath, 300, 300);}

//生成缩略图

function getCropper($source_path,$NewImagePath, $target_width, $target_height){$source_info   = getimagesize($source_path);$source_width  = $source_info[0];$source_height = $source_info[1];

$source_mime   = $source_info['mime'];

$source_ratio  = $source_height / $source_width;$target_ratio  = $target_height / $target_width;// 源图过高if ($source_ratio > $target_ratio)

{

$cropped_width  = $source_width;

$cropped_height = $source_width * $target_ratio;$source_x = 0;$source_y = ($source_height - $cropped_height) / 2;}

// 源图过宽

elseif ($source_ratio < $target_ratio)

{

$cropped_width  = $source_height / $target_ratio;$cropped_height = $source_height;$source_x = ($source_width - $cropped_width) / 2;$source_y = 0;}

// 源图适中

else

{

$cropped_width  = $source_width;

$cropped_height = $source_height;

$source_x = 0;

$source_y = 0;

}

switch ($source_mime)

{

case 'image/gif':

$source_image = imagecreatefromgif($source_path);break;case 'image/jpeg':

$source_image = imagecreatefromjpeg($source_path);break;case 'image/png':

$source_image = imagecreatefrompng($source_path);break;default:

return false;

break;

}

$target_image  = imagecreatetruecolor($target_width, $target_height);$cropped_image = imagecreatetruecolor($cropped_width, $cropped_height);// 图片裁剪imagecopy($cropped_image, $source_image, 0, 0, $source_x, $source_y, $cropped_width, $cropped_height);// 图片缩放imagecopyresampled($target_image, $cropped_image, 0, 0, 0, 0, $target_width, $target_height, $cropped_width, $cropped_height);header('Content-Type: image/jpeg');imagejpeg($target_image,$NewImagePath,100);imagedestroy($source_image);imagedestroy($target_image);

imagedestroy($cropped_image);

}

//生成缩略图,填充白边

function getCrops($src_path,$NewImagePath,$width,$height){//源图对象$src_image = imagecreatefromstring(file_get_contents($src_path));$source_info   = getimagesize($src_path);$source_mime   = $source_info['mime'];$src_width = imagesx($src_image);

$src_height = imagesy($src_image);

switch ($source_mime)

{

case 'image/gif':

$src_image = imagecreatefromgif($src_path);break;case 'image/jpeg':

$src_image = imagecreatefromjpeg($src_path);break;case 'image/png':

$src_image = imagecreatefrompng($src_path);break;default:

return false;

break;

}

//生成等比例的缩略图

//$tmp_image_width = 0;

//$tmp_image_height = 0;

if ($src_width / $src_height >= $width / $height) {$tmp_image_width = $width;$tmp_image_height = round($tmp_image_width * $src_height / $src_width);} else {$tmp_image_height = $height;

$tmp_image_width = round($tmp_image_height * $src_width / $src_height);}

$tmpImage = imagecreatetruecolor($tmp_image_width, $tmp_image_height);imagecopyresampled($tmpImage, $src_image, 0, 0, 0, 0, $tmp_image_width, $tmp_image_height, $src_width, $src_height);//添加白边$final_image = imagecreatetruecolor($width, $height);$color = imagecolorallocate($final_image, 255, 255, 255);imagefill($final_image, 0, 0, $color);$x = round(($width - $tmp_image_width) / 2);$y = round(($height - $tmp_image_height) / 2);imagecopy($final_image, $tmpImage, $x, $y, 0, 0, $tmp_image_width, $tmp_image_height);//输出图片header('Content-Type: image/jpeg');

imagejpeg($final_image,$NewImagePath,100);imagedestroy($src_image);imagedestroy($final_image);

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值