微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

常用的php图片处理类水印、等比缩放、固定高宽分享

常用的PHP图片处理类(水印、等比缩放、固定高宽)分享

rush:PHP;"> //传入原图路径
public function __construct($source){
$this->typeList = array(1=>'gif',2=>'jpg',3=>'png');
$ginfo = getimagesize($source);
$this->source_width = $ginfo[0];
$this->source_height = $ginfo[1];
$this->source_type_id = $ginfo[2];
$this->orign_url = $source;
$this->orign_name = basename($source);
$this->orign_dirname = dirname($source);
}

//判断图片文件的格式,返回PHP可识别的编码
public function judgeType($type,$source){
if($type == 1){
return imagecreatefromgif($source); //gif
}else if($type == 2){
return imagecreatefromjpeg($source); //jpg
}else if($type == 3){
return imagecreatefrompng($source); //png
}else{
return false;
}
}

//生成水印图片
public function waterMakeImage($logo){
$linfo = getimagesize($logo);
$logo_width = $linfo[0];
$logo_height = $linfo[1];
$logo_type_id = $linfo[2];
$sourceHandle = $this->judgeType($this->source_type_id,$this->orign_url);
$logoHandle = $this->judgeType($logo_type_id,$logo);
if(!$sourceHandle || !$logoHandle){
return false;
}
$x = ($this->source_width - $logo_width)/2;
$y = ($this->source_height - $logo_height)/2;
imagecopy($sourceHandle,$logoHandle,$x,$y,$logo_width,$logo_height);
$newPic = $this->origndirname.'\water'.time().'.'.$this->typeList[$this->source_type_id];
if($this->saveImage($sourceHandle,$newPic)){
imagedestroy($sourceHandle);
imagedestroy($logoHandle);
}
}

//固定高度宽度
public function fixSizeImage($width,$height){
if($width > $this->source_width) $this->source_width;
if($height > $this->source_height) $this->source_height;
if($width === false){
$width = floor($this->source_width / ($this->source_height / $height));
}
if($height === false){
$height = floor($this->source_height / ($this->source_width / $width));
}
$this->tinyImage($width,$height);
}

//等比例缩放图片
public function scaleImage($scale){
$width = floor($this->source_width $scale);
$height = floor($this->source_height
$scale);
$this->tinyImage($width,$height);
}

//创建缩略图
public function tinyImage($width,$height){
$tinyImage = imagecreatetruecolor($width,$height);
$handle = $this->judgeType($this->source_type_id,$this->orign_url);
if(function_exists('imagecopyresampled')){
imagecopyresampled($tinyImage,$handle,$width,$height,$this->source_width,$this->source_height);
}else{
imagecopyresized($tinyImage,$this->source_height);
}
$newPic = $this->origndirname.'\thumb'.time().''.$width."".$height.".".$this->typeList[$this->source_type_id];
if($this->saveImage($tinyImage,$newPic)){
imagedestroy($tinyImage);
imagedestroy($handle);
}
}
//保存图片
private function saveImage($image,$url){
if(imagejpeg($image,$url)){
return true;
}
}
}
$imgHandle = new Image_process('D:\AppServ\www\test\getimg\14061907445601.jpg');
//$imgHandle->waterMakeImage('D:\AppServ\www\test\getimg\shougongke.png'); //生成水印图片
//$imgHandle->fixSizeImage(200,150); //固定长度图片
$imgHandle->scaleImage(0.2); //等比例缩放
?>

示例二:

rush:PHP;"> /**

  • @throws Exception
    */
    public function __construct()
    {
    if (! function_exists ( 'gd_info' ))
    {
    throw new Exception ( '加载GD库失败!' );
    }
    }

/**

  • 裁剪压缩
  • @param $src_img 图片
  • @param $save_img 生成后的图片
  • @param $option 参数选项,包括: $maxwidth 宽 $maxheight 高
  • array('width'=>xx,'height'=>xxx)
  • @internal
  • 我们一般的压缩图片方法,在图片过长或过宽时生成图片
  • 都会被“压扁”,针对这个应采用先裁剪后按比例压缩的方法
    */
    public function thumb_img($src_img,$save_img = '',$option)
    {

if (empty ( $option ['width'] ) or empty ( $option ['height'] ))
{
return array ('flag' => False,'msg' => '原图长度与宽度不能小于0' );
}
$org_ext = $this->is_img ( $src_img );
if (! $org_ext ['flag'])
{
return $org_ext;
}

//如果有保存路径,则确定路径是否正确
if (! empty ( $save_img ))
{
$f = $this->check_dir ( $save_img );
if (! $f ['flag'])
{
return $f;
}
}

//获取出相应的方法
$org_funcs = $this->get_img_funcs ( $org_ext ['msg'] );

//获取原大小
$source = $org_funcs ['create_func'] ( $src_img );
$src_w = imagesx ( $source );
$src_h = imagesy ( $source );

//调整原始图像(保持图片原形状裁剪图像)
$dst_scale = $option ['height'] / $option ['width']; //目标图像长宽比
$src_scale = $src_h / $src_w; // 原图长宽比
if ($src_scale >= $dst_scale)
{ // 过高
$w = intval ( $src_w );
$h = intval ( $dst_scale * $w );

$x = 0;
$y = ($src_h - $h) / 3;
} else
{ // 过宽
$h = intval ( $src_h );
$w = intval ( $h / $dst_scale );

$x = ($src_w - $w) / 2;
$y = 0;
}
// 剪裁
$croped = imagecreatetruecolor ( $w,$h );
imagecopy ( $croped,$source,$src_w,$src_h );
// 缩放
$scale = $option ['width'] / $w;
$target = imagecreatetruecolor ( $option ['width'],$option ['height'] );
$final_w = intval ( $w $scale );
$final_h = intval ( $h
$scale );
imagecopyresampled ( $target,$croped,$final_w,$final_h,$w,$h );
imagedestroy ( $croped );

//输出(保存)图片
if (! empty ( $save_img ))
{

$org_funcs ['save_func'] ( $target,$save_img );
} else
{
header ( $org_funcs ['header'] );
$org_funcs ['save_func'] ( $target );
}
imagedestroy ( $target );
return array ('flag' => True,'msg' => '' );
}

/**

  • 等比例缩放图像
  • @param $src_img 原图片
  • @param $save_img 需要保存的地方
  • @param $option 参数设置 array('width'=>xx,'height'=>xxx)
  • */
    function resize_image($src_img,$option)
    {
    $org_ext = $this->is_img ( $src_img );
    if (! $org_ext ['flag'])
    {
    return $org_ext;
    }

//如果有保存路径,则确定路径是否正确
if (! empty ( $save_img ))
{
$f = $this->check_dir ( $save_img );
if (! $f ['flag'])
{
return $f;
}
}

//获取出相应的方法
$org_funcs = $this->get_img_funcs ( $org_ext ['msg'] );

//获取原大小
$source = $org_funcs ['create_func'] ( $src_img );
$src_w = imagesx ( $source );
$src_h = imagesy ( $source );

if (($option ['width'] && $src_w > $option ['width']) || ($option ['height'] && $src_h > $option ['height']))
{
if ($option ['width'] && $src_w > $option ['width'])
{
$widthratio = $option ['width'] / $src_w;
$resizewidth_tag = true;
}

if ($option ['height'] && $src_h > $option ['height'])
{
$heightratio = $option ['height'] / $src_h;
$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 = $src_w $ratio;
$newheight = $src_h
$ratio;

if (function_exists ( "imagecopyresampled" ))
{
$newim = imagecreatetruecolor ( $newwidth,$newheight );
imagecopyresampled ( $newim,$newwidth,$newheight,$src_h );
} else
{
$newim = imagecreate ( $newwidth,$newheight );
imagecopyresized ( $newim,$src_h );
}
}
//输出(保存)图片
if (! empty ( $save_img ))
{

$org_funcs ['save_func'] ( $newim,$save_img );
} else
{
header ( $org_funcs ['header'] );
$org_funcs ['save_func'] ( $newim );
}
imagedestroy ( $newim );
return array ('flag' => True,'msg' => '' );
}

/**

  • 生成水印图片
  • @param $org_img 原图像
  • @param $mark_img 水印标记图像
  • @param $save_img 当其目录不存在时,会试着创建目录
  • @param array $option 为水印的一些基本设置包含:
  • x:水印的水平位置,认为减去水印图宽度后的值
  • y:水印的垂直位置,认为减去水印图高度后的值
  • alpha:alpha值(控制透明度),认为50
    */
    public function water_mark($org_img,$mark_img,$option = array())
    {
    //检查图片
    $org_ext = $this->is_img ( $org_img );
    if (! $org_ext ['flag'])
    {
    return $org_ext;
    }
    $mark_ext = $this->is_img ( $mark_img );
    if (! $mark_ext ['flag'])
    {
    return $mark_ext;
    }
    //如果有保存路径,则确定路径是否正确
    if (! empty ( $save_img ))
    {
    $f = $this->check_dir ( $save_img );
    if (! $f ['flag'])
    {
    return $f;
    }
    }

//获取相应画布
$org_funcs = $this->get_img_funcs ( $org_ext ['msg'] );
$org_img_im = $org_funcs ['create_func'] ( $org_img );

$mark_funcs = $this->get_img_funcs ( $mark_ext ['msg'] );
$mark_img_im = $mark_funcs ['create_func'] ( $mark_img );

//拷贝水印图片坐标
$mark_img_im_x = 0;
$mark_img_im_y = 0;
//拷贝水印图片高宽
$mark_img_w = imagesx ( $mark_img_im );
$mark_img_h = imagesy ( $mark_img_im );

$org_img_w = imagesx ( $org_img_im );
$org_img_h = imagesx ( $org_img_im );

//合成生成点坐标
$x = $org_img_w - $mark_img_w;
$org_img_im_x = isset ( $option ['x'] ) ? $option ['x'] : $x;
$org_img_im_x = ($org_img_im_x > $org_img_w or $org_img_im_x < 0) ? $x : $org_img_im_x;
$y = $org_img_h - $mark_img_h;
$org_img_im_y = isset ( $option ['y'] ) ? $option ['y'] : $y;
$org_img_im_y = ($org_img_im_y > $org_img_h or $org_img_im_y < 0) ? $y : $org_img_im_y;

//alpha
$alpha = isset ( $option ['alpha'] ) ? $option ['alpha'] : 50;
$alpha = ($alpha > 100 or $alpha < 0) ? 50 : $alpha;

//合并图片
imagecopymerge ( $org_img_im,$mark_img_im,$org_img_im_x,$org_img_im_y,$mark_img_im_x,$mark_img_im_y,$mark_img_w,$mark_img_h,$alpha );

//输出(保存)图片
if (! empty ( $save_img ))
{

$org_funcs ['save_func'] ( $org_img_im,$save_img );
} else
{
header ( $org_funcs ['header'] );
$org_funcs ['save_func'] ( $org_img_im );
}
//销毁画布
imagedestroy ( $org_img_im );
imagedestroy ( $mark_img_im );
return array ('flag' => True,'msg' => '' );

}

/**

  • 检查图片
  • @param unkNown_type $img_path
  • @return array('flag'=>true/false,'msg'=>ext/错误信息)
    */
    private function is_img($img_path)
    {
    if (! file_exists ( $img_path ))
    {
    return array ('flag' => False,'msg' => "加载图片 $img_path 失败!" );
    }
    $ext = explode ( '.',$img_path );
    $ext = strtolower ( end ( $ext ) );
    if (! in_array ( $ext,$this->exts ))
    {
    return array ('flag' => False,'msg' => "图片 $img_path 格式不正确!" );
    }
    return array ('flag' => True,'msg' => $ext );
    }

/**

  • 返回正确的图片函数
  • @param unkNown_type $ext
    */
    private function get_img_funcs($ext)
    {
    //选择
    switch ($ext)
    {
    case 'jpg' :
    $header = 'Content-Type:image/jpeg';
    $createfunc = 'imagecreatefromjpeg';
    $savefunc = 'imagejpeg';
    break;
    case 'jpeg' :
    $header = 'Content-Type:image/jpeg';
    $createfunc = 'imagecreatefromjpeg';
    $savefunc = 'imagejpeg';
    break;
    case 'gif' :
    $header = 'Content-Type:image/gif';
    $createfunc = 'imagecreatefromgif';
    $savefunc = 'imagegif';
    break;
    case 'bmp' :
    $header = 'Content-Type:image/bmp';
    $createfunc = 'imagecreatefrombmp';
    $savefunc = 'imagebmp';
    break;
    default :
    $header = 'Content-Type:image/png';
    $createfunc = 'imagecreatefrompng';
    $savefunc = 'imagepng';
    }
    return array ('save_func' => $savefunc,'create_func' => $createfunc,'header' => $header );
    }

/**

  • 检查并试着创建目录
  • @param $save_img
    */
    private function check_dir($save_img)
    {
    $dir = dirname ( $save_img );
    if (! is_dir ( $dir ))
    {
    if (! mkdir ( $dir,0777,true ))
    {
    return array ('flag' => False,'msg' => "图片保存目录 $dir 无法创建!" );
    }
    }
    return array ('flag' => True,'msg' => '' );
    }
    }

if (! empty ( $_FILES ['test'] ['tmp_name'] ))
{
//例子
$img = new Img ();
//原图
$name = explode ( '.',$_FILES ['test'] ['name'] );
$org_img = 'D:/test.' . end ( $name );
move_uploaded_file ( $_FILES ['test'] ['tmp_name'],$org_img );
$option = array ('width' => $_POST ['width'],'height' => $_POST ['height'] );
if ($_POST ['type'] == 1)
{
$s = $img->resize_image ( $org_img,'',$option );
} else
{
$img->thumb_img ( $org_img,$option );
}
unlink ( $org_img );
}

以上所述就是本文的全部内容了,希望大家能够喜欢。

原文地址:https://www.jb51.cc/php/21729.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐