失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > php 图片操作类 支持生成缩略图 添加水印 上传缩略图

php 图片操作类 支持生成缩略图 添加水印 上传缩略图

时间:2022-02-14 14:25:02

相关推荐

php 图片操作类 支持生成缩略图 添加水印 上传缩略图

后端开发|php教程

php 图片操作类,支持生成缩略图,添加水印,上传缩略图

后端开发-php教程

<?php

gallery2 源码分析,vscode数字计算,ubuntu源列表无法读取,tomcat存储地址,sqlite的基本使用,wordpress 最好的插件,w前端框架技术期末,微博api 爬虫,PHP的上传大小限制,seo三人行官网,电影网站对接微信群,网页模版比较出名的网站,jqh5登录模板,编辑页面选项,javaweb自学考试管理系统源代码,织梦前台程序在那个文件夹lzw

class Image {

开源CMS源码下载,vscode美化界面的插件,手机安装 ubuntu,tomcat外网访问配置,java sqlite,ps教育类网页设计作品,万网数据库网址,服务器怎么运行网站,在线报名插件,dmz 前端框架,竹子爬虫,php性能优化,seo发布网站,阿里干货springboot,帝国cms清除html标签,网站云模板,如何分析网页游戏代码,模板信息群发,帝国cms 后台 左侧 页面,页面自适应跳转刷新,access是( )的数据库管理系统.,网址导航程序源码lzw

//类开始

凌风网站源码,ubuntu支持的蓝牙,爬虫会违法吗,selium php,综合查询seolzw

public $originimage = “” ; //源图片文件地址

public $imageext = “” ; //源图片格式

public $thumbimage = “” ; //缩略图文件存放地址

public $thumb_maxwidth = 1440; //缩略图最大宽度

public $thumb_maxheight = 900; //缩略图最大高度

public $watermark_text = “” ; //水印文字内容

public $watermark_minwidth = 300; //源图片最小宽度:大于此值时加水印

public $watermark_minheight = 200; //源图片最小高度:大于此值时加水印

public $watermark_fontfile = “” ; //字体文件

public $watermark_fontsize = 14; //字体大小

public $watermark_logo = “config/water.jpg” ; //水印LOGO地址

public $watermark_transparent = 20; //水印LOGO不透明度

private $origin_width = 0; //源图片宽度

private $origin_height = 0; //源图片高度

private $imageQuilty = 90; //图片质量

private $tmp_originimage = “” ; //临时图片(源图片)

private $tmp_thumbimage = “” ; //临时图片(缩略图)

private $tmp_waterimage = “” ; //临时图片(水印LOGO)

private $_waterPosition = 2; //1正中间 2右下角

//生成缩略图

public function gen_thumbimage() {

if ( $this ->originimage == “” || $this ->thumbimage == “” ) {

return 0;

}

$this ->get_oriwidthheight ();

if ( $this ->origin_width thumb_maxwidth && $this ->origin_height thumb_maxheight) {

$this ->thumb_maxwidth = $this ->origin_width;

$this ->thumb_maxheight = $this ->origin_height;

} else {

if ( $this ->origin_width origin_height) {

$this ->thumb_maxwidth = ( $this ->thumb_maxheight / $this ->origin_height) * $this ->origin_width;

} else {

$this ->thumb_maxheight = ( $this ->thumb_maxwidth / $this ->origin_width) * $this ->origin_height;

}

}

$this ->get_imagetype ();

$this ->gen_tmpimage_origin ();

$this ->gen_tmpimage_thumb ();

if ( $this ->tmp_originimage == “” || $this ->tmp_thumbimage == “” ) {

return – 1;

}

imagecopyresampled ( $this ->tmp_thumbimage, $this ->tmp_originimage, 0, 0, 0, 0, $this ->thumb_maxwidth, $this ->thumb_maxheight, $this ->origin_width, $this ->origin_height );

switch ( $this ->imageext) {

case “gif” :

imagegif ( $this ->tmp_thumbimage, $this ->thumbimage );

return 1;

break ;

case “jpg” :

imagejpeg ( $this ->tmp_thumbimage, $this ->thumbimage, $this ->imageQuilty );

return 2;

break ;

case “png” :

imagepng ( $this ->tmp_thumbimage, $this ->thumbimage );

return 3;

break ;

default :

return – 2;

break ;

}

}

//添加文字水印

public function add_watermark1() {

if ( $this ->originimage == “” || $this ->watermark_text == “” || $this ->watermark_fontfile == “” ) {

return 0;

}

$this ->get_oriwidthheight ();

if ( $this ->origin_width watermark_minwidth || $this ->origin_height watermark_minheight) {

return 0;

}

$this ->get_imagetype ();

$this ->gen_tmpimage_origin ();

if ( $this ->tmp_originimage == “” ) {

return – 1;

}

$textcolor = imagecolorallocate ( $this ->tmp_originimage, 255, 0, 0 );

$angle = 0;

$px = $this ->origin_width / 2 – 200;

$py = $this ->origin_height / 2 – 10;

imagettftext ( $this ->tmp_originimage, $this ->watermark_fontsize, $angle , $px , $py , $textcolor , $this ->watermark_fontfile, $this ->watermark_text );

switch ( $this ->imageext) {

case “gif” :

imagegif ( $this ->tmp_originimage, $this ->originimage );

return 1;

break ;

case “jpg” :

imagejpeg ( $this ->tmp_originimage, $this ->originimage, $this ->imageQuilty );

return 2;

break ;

case “png” :

imagepng ( $this ->tmp_originimage, $this ->originimage );

return 3;

break ;

default :

return – 2;

break ;

}

}

//添加LOGO水印

public function add_watermark2() {

if ( $this ->originimage == “” || $this ->watermark_logo == “” ) {

return 0;

}

$this ->get_oriwidthheight ();

if ( $this ->origin_width watermark_minwidth || $this ->origin_height watermark_minheight) {

return 0;

}

$this ->get_imagetype ();

$this ->gen_tmpimage_origin ();

$this ->gen_tmpimage_waterlogo ();

if ( $this ->tmp_originimage == “” || $this ->tmp_waterimage == “” ) {

return – 1;

}

list ( $logo_width , $logo_height ) = getimagesize ( $this ->watermark_logo );

//正中间

$waterZb = $this ->waterPosition ( $logo_width , $logo_height );

$px = $waterZb [ ‘x’ ];

$py = $waterZb [ ‘y’ ];

imagecopymerge ( $this ->tmp_originimage, $this ->tmp_waterimage, $px , $py , 0, 0, $logo_width , $logo_height , $this ->watermark_transparent );

switch ( $this ->imageext) {

case “gif” :

imagegif ( $this ->tmp_originimage, $this ->originimage );

return 1;

break ;

case “jpg” :

imagejpeg ( $this ->tmp_originimage, $this ->originimage, $this ->imageQuilty );

return 2;

break ;

case “png” :

imagepng ( $this ->tmp_originimage, $this ->originimage );

return 3;

break ;

default :

return – 2;

break ;

}

}

/**

* 上传缩略图

* 注意上传文件大小限制

*@param String $files $_FILES[‘upload’] 类型

*@param String $path 存储的目录 默认在/static/attached/

*@param boolean $isWater 是否添加水印

* @return string $filePath 网页url图片路径

*/

public function upload( $files , $path , $isWater ) {

if ( is_uploaded_file ( $files [ ‘tmp_name’ ] )) {

$upfile = $files ;

$name = $upfile [name];

$type = $upfile [type];

$size = $upfile [size];

$tmp_name = $upfile [tmp_name];

$error = $upfile [error];

if ( $size > 1048576) {

return array ( ‘status’ => false, ‘message’ => “$name图片太大超过1MB” );

}

$rs = $this -> getImageSize ( $tmp_name );

if (! $rs [ ‘status’ ]) {

$rs [ ‘message’ ] = $name . $rs [ ‘message’ ];

return $rs ;

}

// 创建文件夹

$save_path = getcwd () . “/static/attached/” . $path . “/” ;

$save_url = “./static/attached/” . $path . “/” ;

$ym = date ( “Ym” );

$save_path .= $ym . “/” ;

$save_url .= $ym . “/” ;

if (! file_exists ( $save_path )) {

mkdir ( $save_path );

}

if ( $error == ‘0’ ) {

$fileType = substr ( $name , strpos ( $name , “.” ) + 1 );

$prefix = $this ->getRandPrefix ();

$newName = date ( “YmdHi” ) . $prefix . “.” . $fileType ;

$filepath = $save_path . $newName ;

move_uploaded_file ( $tmp_name , $filepath );

}

if ( $isWater ) {

$this ->water ( $filepath );

}

return array ( ‘status’ => true, ‘message’ => $save_url . $newName );

}

}

/**

* 图片增加水印处理

* @param unknown_type $image

*/

public function water( $image ) {

$this ->watermark_logo = ROOT . $this ->watermark_logo;

$this ->originimage = $image ;

//LOGO水印

$this ->add_watermark2 ();

}

/**

*

* 获取随机前缀

*/

private function getRandPrefix() {

$string = “abcdefghijklmnopqrstuvwxyz0123456789” ;

$prefix = ” ;

for ( $i = 0; $i < 4; $i ++) {

$rand = rand ( 0, 33 );

$prefix .= $string { $rand };

}

return $prefix ;

}

//检测图片大小

private function getImageSize ( $image ) {

list ( $width , $height , $type , $attr ) = getimagesize ( $image );

if ( $type != 2 && $type != 3) {

return array ( ‘status’ => false, ‘message’ => “图片格式不正确,请上传JPG或者PNG图片” . $type );

}

//检测图片大小

if ( $width > 1440) {

return array ( ‘status’ => false, ‘message’ => “图片宽度请小于1440px,当前为” . $width . “px” );

}

if ( $height > 900) {

return array ( ‘status’ => false, ‘message’ => “图片高度请小于900px,当前为” . $height . “px” );

}

return array ( ‘status’ => true );

}

/**

* 生成缩略图

*

* @param String $imagefile 原始文件

* @param String $thumbWidth 缩略图宽度

* @param String $thumbHeight 缩略图高度

* @return String 缩略图url

*/

public function reduceImage( $imagefile , $thumbWidth , $thumbHeight , $path = “thumb” ) {

// 生成缩略图

$dir = date ( “Ym” , time () );

$imagefile = ROOT . $imagefile ;

$imagefile_s = ROOT . “static/attached/” . $path . “/” . $dir . “/s_” . basename ( $imagefile );

$imagetrans = new Image ();

$imagetrans ->originimage = $imagefile ;

$imagetrans ->thumbimage = $imagefile_s ;

$imagetrans ->thumb_maxwidth = $thumbWidth ;

$imagetrans ->thumb_maxheight = $thumbHeight ;

$isokid = $imagetrans ->gen_thumbimage ();

return “./static/attached/” . $path . “/” . $dir . “/s_” . basename ( $imagefile );

}

/**

* 水印位置

* @param int $logo_width

* @param int $logo_height

* @return 水印坐标

*/

private function waterPosition( $logo_width , $logo_height ) {

switch ( $this ->_waterPosition) {

case 1 :

$px = $this ->origin_width / 2 – $logo_width / 2;

$py = $this ->origin_height / 2 – $logo_height / 2;

break ;

case 2 :

$px = $this ->origin_width – $logo_width – 10;

$py = $this ->origin_height – $logo_height – 10;

break ;

default :

$px = $this ->origin_width / 2 – $logo_width / 2;

$py = $this ->origin_height / 2 – $logo_height / 2;

break ;

}

return array ( ‘x’ => $px , ‘y’ => $py );

}

//获取图片尺寸

private function get_oriwidthheight() {

list ( $this ->origin_width, $this ->origin_height ) = getimagesize ( $this ->originimage );

return 1;

}

/*

* 检测图片格式

* 原方法需要开启exif 扩展

*/

private function get_imagetype() {

$ext = $this ->getImgext ( $this ->originimage );

switch ( $ext ) {

case 1 :

$this ->imageext = “gif” ;

break ;

case 2 :

$this ->imageext = “jpg” ;

break ;

case 3 :

$this ->imageext = “png” ;

break ;

default :

$this ->imageext = “unknown” ;

break ;

}

}

//创建临时图片(源图片)

private function gen_tmpimage_origin() {

$ext = $this ->getImgext ( $this ->originimage );

switch ( $ext ) {

case 1 :

$this ->tmp_originimage = imagecreatefromgif ( $this ->originimage );

$bgcolor = imagecolorallocate ( $this ->tmp_originimage, 0, 0, 0 );

$bgcolortrans = imagecolortransparent ( $this ->tmp_originimage, $bgcolor );

break ;

case 2 :

$this ->tmp_originimage = imagecreatefromjpeg ( $this ->originimage );

break ;

case 3 :

$this ->tmp_originimage = imagecreatefrompng ( $this ->originimage );

imagesavealpha ( $this ->tmp_originimage, true );

break ;

default :

$this ->tmp_originimage = “” ;

break ;

}

}

//创建临时图片(缩略图)

private function gen_tmpimage_thumb() {

$ext = $this ->getImgext ( $this ->originimage );

switch ( $ext ) {

case 1 :

$this ->tmp_thumbimage = imagecreatetruecolor ( $this ->thumb_maxwidth, $this ->thumb_maxheight );

$bgcolor = imagecolorallocate ( $this ->tmp_thumbimage, 255, 255, 255 );

imagefill ( $this ->tmp_thumbimage, 0, 0, $bgcolor );

break ;

case 2 :

$this ->tmp_thumbimage = imagecreatetruecolor ( $this ->thumb_maxwidth, $this ->thumb_maxheight );

break ;

case 3 :

$this ->tmp_thumbimage = imagecreatetruecolor ( $this ->thumb_maxwidth, $this ->thumb_maxheight );

$bgcolor = imagecolorallocate ( $this ->tmp_thumbimage, 255, 255, 255 );

imagefill ( $this ->tmp_thumbimage, 0, 0, $bgcolor );

imagealphablending ( $this ->tmp_thumbimage, false );

imagesavealpha ( $this ->tmp_thumbimage, true );

break ;

default :

$this ->tmp_thumbimage = “” ;

break ;

}

}

//创建临时图片(LOGO水印)

private function gen_tmpimage_waterlogo() {

$ext = $this ->getImgext ( $this ->watermark_logo );

switch ( $ext ) {

case 1 :

$this ->tmp_waterimage = imagecreatefromgif ( $this ->watermark_logo );

$bgcolor = imagecolorallocate ( $this ->tmp_waterimage, 0, 0, 0 );

$bgcolortrans = imagecolortransparent ( $this ->tmp_waterimage, $bgcolor );

break ;

case 2 :

$this ->tmp_waterimage = imagecreatefromjpeg ( $this ->watermark_logo );

break ;

case 3 :

$this ->tmp_waterimage = imagecreatefrompng ( $this ->watermark_logo );

imagesavealpha ( $this ->tmp_waterimage, true );

break ;

default :

$this ->tmp_waterimage = “” ;

break ;

}

}

/*

* 获取后缀名

*/

public function getImgext( $filename ) {

return exif_imagetype ( $filename );

}

//释放资源

public function __destruct() {

if ( is_object ( $this ->tmp_originimage ) == true) {

imagedestroy ( $this ->tmp_originimage );

}

if ( is_object ( $this ->tmp_thumbimage ) == true) {

imagedestroy ( $this ->tmp_thumbimage );

}

if ( is_object ( $this ->tmp_waterimage ) == true) {

imagedestroy ( $this ->tmp_waterimage );

}

}

}

如果觉得《php 图片操作类 支持生成缩略图 添加水印 上传缩略图》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。