Talk is cheap. Show you the code。
裁剪图片,并返回裁剪后的图片二进制
/**
* 上传图片处理 原图像素大于1000*1000的处理
* $maxwidth = 1000
* $maxheight = 1000
*/
function resizeImage($im,$maxwidth=1000,$maxheight=1000){
$pic_width = imagesx($im);
$pic_height = imagesy($im);
if(($maxwidth && $pic_width > $maxwidth) || ($maxheight && $pic_height > $maxheight)){
if($maxwidth && $pic_width>$maxwidth){
$widthratio = $maxwidth/$pic_width;
$resizewidth_tag = true;
}
if($maxheight && $pic_height>$maxheight){
$heightratio = $maxheight/$pic_height;
$resizeheight_tag = true;
}
if($resizewidth_tag && $resizeheight_tag){
if($widthratio<$heightratio){
$ratio = $widthratio;
}else{
$ratio = $heightratio;
}
}
if($resizewidth_tag && !$resizeheight_tag)$ratio = $widthratio;
if($resizeheight_tag && !$resizewidth_tag)$ratio = $heightratio;
$newwidth = $pic_width * $ratio;
$newheight = $pic_height * $ratio;
if(function_exists("imagecopyresampled")){
$newim = imagecreatetruecolor($newwidth,$newheight);
imagecopyresampled($newim,$im,0,0,0,0,$newwidth,$newheight,$pic_width,$pic_height);
}else{
$newim = imagecreate($newwidth,$newheight);
imagecopyresized($newim,$im,0,0,0,0,$newwidth,$newheight,$pic_width,$pic_height);
}
//不写入服务
ob_start(); //开启缓存
imagejpeg($newim);
$erjinzhi = ob_get_clean(); //获取二进制
return $erjinzhi; //返回二进制
}else{ //像素没超过规定范围,返回原图二进制
ob_start();
imagejpeg($im);
$erjinzhi = ob_get_clean();
return $erjinzhi;
}
}
以下是调用七牛sdk上传二进制至服务器
$imageresource = 'J:\wamp\tmp\php8D3.tmp' ;//上传图片的临时文件或本地图片路径
$imgFile = $this->resizeImage($imageresource);//像素大于1000*1000的前期处理后上传
// 上传到七牛后保存的文件名
$time = md5(microtime().rand(1000,9999));
$name = substr($time, 0, 2) .'/'. substr($time, 2, 2) .'/'. $time;
$key = 'bbs/'.$name.'.jpg'; //上传后的文件命名
// 初始化 UploadManager 对象并进行文件的上传
$uploadMgr = new UploadManager();
// 调用 UploadManager 的 put 方法进行文件的上传
list($ret, $err) = $uploadMgr->put($token, $key, $imgFile);
以上是jpg静态图的上传方式,可根据传图属性分别使用imagejpeg() imagebmp() imagepng()不同方法。
如果gif上传也用以上方法的话,gif被裁剪后的结果只会保留gif的第一帧,也就是说裁剪后的gif是不会动的静态图,gif上传可直接使用七牛的UploadManager的putFile()直接上传。跳过裁剪过程。