h5压缩图片上传 php_PHP、HTML5上传图片自动压缩问题

展开全部

给你个图片处理的类吧,图片剪裁处理后,也就等于将图片压32313133353236313431303231363533e58685e5aeb931333361313339缩了。/**

* 图像处理类

* ============================================================================

* Copyright 2014 大秦科技,并保留所有权利。

* 网站地址: http://www.qintech.net;

* ============================================================================

*/

class Image{

//生成缩略图的方式

public $thumbType;

//缩略图的宽度

public $thumbWidth;

//缩略图的高度

public $thumbHeight;

//生成缩略图文件名后缀

public $thumbEndFix;

//缩略图文件前缀

public $thumbPreFix;

/**

* 构造函数

*/

public function __construct(){

$this->thumbType = 1;

$this->thumbWidth = 120;

$this->thumbHeight = 60;

$this->thumbPreFix ='';

$this->thumbEndFix =  '_thumb';

}

/**

* 检测是否为图像文件

* @param $img 图像

* @return bool

*/

private function check($img){

$type = array(".jpg", ".jpeg", ".png", ".gif");

$imgType = strtolower(strrchr($img, '.'));

return extension_loaded('gd') && file_exists($img) && in_array($imgType, $type);

}

/**

* 获得缩略图的尺寸信息

* @param $imgWidth 原图宽度

* @param $imgHeight 原图高度

* @param $thumbWidth 缩略图宽度

* @param $thumbHeight 缩略图的高度

* @param $thumbType 处理方式

* 1 固定宽度  高度自增 2固定高度  宽度自增 3固定宽度  高度裁切

* 4 固定高度 宽度裁切 5缩放最大边 原图不裁切

* @return mixed

*/

private function thumbSize($imgWidth, $imgHeight, $thumbWidth, $thumbHeight, $thumbType){

//初始化缩略图尺寸

$w = $thumbWidth;

$h = $thumbHeight;

//初始化原图尺寸

$cuthumbWidth = $imgWidth;

$cuthumbHeight = $imgHeight;

switch ($thumbType) {

case 1 :

//固定宽度  高度自增

$h = $thumbWidth / $imgWidth * $imgHeight;

break;

case 2 :

//固定高度  宽度自增

$w = $thumbHeight / $imgHeight * $imgWidth;

break;

case 3 :

//固定宽度  高度裁切

$cuthumbHeight = $imgWidth / $thumbWidth * $thumbHeight;

break;

case 4 :

//固定高度  宽度裁切

$cuthumbWidth = $imgHeight / $thumbHeight * $thumbWidth;

break;

case 5 :

//缩放最大边 原图不裁切

if (($imgWidth / $thumbWidth) > ($imgHeight / $thumbHeight)) {

$h = $thumbWidth / $imgWidth * $imgHeight;

} elseif (($imgWidth / $thumbWidth) 

$w = $thumbHeight / $imgHeight * $imgWidth;

} else {

$w = $thumbWidth;

$h = $thumbHeight;

}

break;

default:

//缩略图尺寸不变,自动裁切图片

if (($imgHeight / $thumbHeight) 

$cuthumbWidth = $imgHeight / $thumbHeight * $thumbWidth;

} elseif (($imgHeight / $thumbHeight) > ($imgWidth / $thumbWidth)) {

$cuthumbHeight = $imgWidth / $thumbWidth * $thumbHeight;

}

//            }

}

$arr [0] = $w;

$arr [1] = $h;

$arr [2] = $cuthumbWidth;

$arr [3] = $cuthumbHeight;

return $arr;

}

/**

* 图片裁切处理

* @param $img 原图

* @param string $outFile 另存文件名

* @param string $thumbWidth 缩略图宽度

* @param string $thumbHeight 缩略图高度

* @param string $thumbType 裁切图片的方式

* 1 固定宽度  高度自增 2固定高度  宽度自增 3固定宽度  高度裁切

* 4 固定高度 宽度裁切 5缩放最大边 原图不裁切 6缩略图尺寸不变,自动裁切最大边

* @return bool|string

*/

public function thumb($img, $outFile = '', $thumbWidth = '', $thumbHeight = '', $thumbType = ''){

if (!$this->check($img)) {

return false;

}

//基础配置

$thumbType = $thumbType ? $thumbType : $this->thumbType;

$thumbWidth = $thumbWidth ? $thumbWidth : $this->thumbWidth;

$thumbHeight = $thumbHeight ? $thumbHeight : $this->thumbHeight;

//获得图像信息

$imgInfo = getimagesize($img);

$imgWidth = $imgInfo [0];

$imgHeight = $imgInfo [1];

$imgType = image_type_to_extension($imgInfo [2]);

//获得相关尺寸

$thumb_size = $this->thumbSize($imgWidth, $imgHeight, $thumbWidth, $thumbHeight, $thumbType);

//原始图像资源

$func = "imagecreatefrom" . substr($imgType, 1);

$resImg = $func($img);

//缩略图的资源

if ($imgType == '.gif') {

$res_thumb = imagecreate($thumb_size [0], $thumb_size [1]);

$color = imagecolorallocate($res_thumb, 255, 0, 0);

} else {

$res_thumb = imagecreatetruecolor($thumb_size [0], $thumb_size [1]);

imagealphablending($res_thumb, false); //关闭混色

imagesavealpha($res_thumb, true); //储存透明通道

}

//绘制缩略图X

if (function_exists("imagecopyresampled")) {

imagecopyresampled($res_thumb, $resImg, 0, 0, 0, 0, $thumb_size [0], $thumb_size [1], $thumb_size [2], $thumb_size [3]);

} else {

imagecopyresized($res_thumb, $resImg, 0, 0, 0, 0, $thumb_size [0], $thumb_size [1], $thumb_size [2], $thumb_size [3]);

}

//处理透明色

if ($imgType == '.gif') {

imagecolortransparent($res_thumb, $color);

}

//配置输出文件名

$imgInfo = pathinfo($img);

$outFile = $outFile ? $outFile :dirname($img).'/'. $this->thumbPreFix . $imgInfo['filename'] . $this->thumbEndFix . "." . $imgInfo['extension'];

Files::create(dirname($outFile));

$func = "image" . substr($imgType, 1);

$func($res_thumb, $outFile);

if (isset($resImg))

imagedestroy($resImg);

if (isset($res_thumb))

imagedestroy($res_thumb);

return $outFile;

}

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值