谁有php批量处理图片、图片生成缩略图、图片添加水印的函数?

谁有php批量处理图片、图片生成缩略图、图片添加水印的函数?,第1张

//批量处理图片、图片生成缩略图、图片添加水印

$dir = opendir (dirname(__FILE__))

while (!!$_file = readdir($dir)){

 list($filesname,$kzm)=explode(".",$_file)//获取扩展名

 if($kzm=="gif" or $kzm=="jpg" or $kzm=="JPG" or $kzm=="png") {

  if(!makethumb("$_file","120","120","100")){

   echo '执行成功!'

  }else{

   echo '执行失败!'

  }

 }

}

closedir($dir)

/**

 * 处理缩略图并添加水印函数

 * @access publiuc

 * @param $srcFile-----------图片文件名

 * @param $dstFile-----------另存的文件名

 * @param $dstW-------------图片保存的宽度

 * @param $dstH--------------图片保存的高度

 * @param $rate---------------图片保存的品质

 * @param $markwords-----水印文字

 * @param $markimage-----水印图片

 * @param 使用方法 makethumb("a.jpg","b.jpg","120","120","100")

 */

function makethumb($srcFile/*,$dstFile*/,$dstW,$dstH,$rate=100/*,$markwords=null,$markimage=null*/) {

 

 $data = GetImageSize($srcFile)

 switch($data[2]) {

  case 1:

  $im=@ImageCreateFromGIF($srcFile)

  break

  case 2:

  $im=@ImageCreateFromJPEG($srcFile)

  break

  case 3:

  $im=@ImageCreateFromPNG($srcFile)

  break

  }

 if(!$im) return False

 $srcW=ImageSX($im)

 $srcH=ImageSY($im)

 $dstX=0

 $dstY=0

 if ($srcW*$dstH>$srcH*$dstW) {

 $fdstH = round($srcH*$dstW/$srcW)

 $dstY = floor(($dstH-$fdstH)/2)

 $fdstW = $dstW

 }

 else

 {

 $fdstW = round($srcW*$dstH/$srcH)

 $dstX = floor(($dstW-$fdstW)/2)

 $fdstH = $dstH

 }

$ni=ImageCreateTrueColor($dstW,$dstH)

$dstX=($dstX<0)?0:$dstX

$dstY=($dstX<0)?0:$dstY

$dstX=($dstX>($dstW/2))?floor($dstW/2):$dstX

$dstY=($dstY>($dstH/2))?floor($dstH/s):$dstY

$white = ImageColorAllocate($ni,255,255,255)

$black = ImageColorAllocate($ni,0,0,0)

imagefilledrectangle($ni,0,0,$dstW,$dstH,$white)// 填充背景色

ImageCopyResized($ni,$im,$dstX,$dstY,0,0,$fdstW,$fdstH,$srcW,$srcH)

//if($markwords!=null){

// $markwords=iconv("gb2312","UTF-8",$markwords)

// //转换文字编码

// ImageTTFText($ni,20,30,450,560,$black,"simhei.ttf",$markwords) //写入文字水印,参数依次为,文字大小|偏转度|横坐标|纵坐标|文字颜色|文字类型|文字内容

//}elseif($markimage!=null) {

// $wimage_data = GetImageSize($markimage)

// switch($wimage_data[2]) {

// case 1:

//  $wimage=@ImageCreateFromGIF($markimage)

//  break

// case 2:

//  $wimage=@ImageCreateFromJPEG($markimage)

//  break

// case 3:

//  $wimage=@ImageCreateFromPNG($markimage)

//  break

// }

// imagecopy($ni,$wimage,500,560,0,0,88,31) //写入图片水印,水印图片大小默认为88*31

// imagedestroy($wimage)

//}

$dstFile = $srcFile.'.gif'

ImageJpeg($ni,$dstFile,$rate)

//ImageJpeg($ni,$srcFile,$rate)

imagedestroy($im)

imagedestroy($ni)

}

给你一个封装的图片处理的类吧!包含缩放和剪切功能!

构造方法只需要传递图片所在路径即可!对应方法及参数都有注释!

请给予最佳答案!!

<?php

class Img{

private $path

//构造方法,初始化图片信息

function __construct($path='./imgs/'){

$this->path=rtrim($path,'/').'/'

}

/**

* 对图片进行缩放

* 参数对应:文件名 缩放后宽度 缩放后高度 缩放后图片名前缀

*/

function thumb($name,$width,$height,$pre="th_"){

if(file_exists($this->path.$name)){

$imgInfo=$this->getInfo($name)

$img=$this->getImg($name,$imgInfo)

$newSize=$this->getNewSize($name,$width,$height,$imgInfo)

$newImg=$this->getNewInfo($img,$newSize,$imgInfo)

return $this->createNewImage($newImg, $pre.$name, $imgInfo)

}else{

echo '图片'.$this->path.$name.'不存在,请检查文件名及路径是否填写正确'

}

}

//辅助图片处理,获取图片的宽、高、类型属性

private function getInfo($name){

$temp=getImageSize($this->path.$name)

$imgInfo['width']=$temp[0]

$imgInfo['height']=$temp[1]

$imgInfo['type']=$temp[2]

return $imgInfo

}

//辅助图片处理,获取创建的图片资源

private function getImg($name,$imgInfo){

$src=$this->path.$name

switch($imgInfo['type']){

case 1:

$img=imagecreatefromgif($src)

break

case 2:

$img=imagecreatefromjpeg($src)

break

case 3:

$img=imagecreatefrompng($src)

break

}

return $img

}

//辅助图片处理,获取创建的图片资源

private function getNewSize($name,$width,$height,$imgInfo){

$newSize['width']=$imgInfo['width']

$newSize['height']=$imgInfo['height']

if($width<$imgInfo['width']){

$newSize['width']=$width

}

if($height<$imgInfo['height']){

$newSize['height']=$height

}

if($imgInfo["width"]*$newSize["width"] >$imgInfo["height"] * $newSize["height"]){

$newSize["height"]=round($imgInfo["height"]*$newSize["width"]/$imgInfo["width"])

}else{

$newSize["width"]=round($imgInfo["width"]*$newSize["height"]/$imgInfo["height"])

}

print_r($newSize)

return $newSize

}

//辅助图片处理,获取缩放的图片资源

private function getNewInfo($img,$newSize,$imgInfo){

$newImg=imagecreatetruecolor($newSize['height'],$newSize['height'])

$otsc=imagecolortransparent($img)

if($otsc >=0 &&$otsc <= imagecolorstotal($img)){

$tran=imagecolorsforindex($img, $otsc)

$newt=imagecolorallocate($newImg, $tran["red"], $tran["green"], $tran["blue"])

imagefill($newImg, 0, 0, $newt)

imagecolortransparent($newImg, $newt)

}

imagecopyresized($newImg, $img, 0, 0, 0, 0, $newSize["width"], $newSize["height"], $imgInfo["width"], $imgInfo["height"])

imagedestroy($img)

return $newImg

}

//辅助图片处理,创建新的图片

private function createNewImage($newImg, $newName, $imgInfo){

switch($imgInfo["type"]){

case 1://gif

$result=imageGif($newImg, $this->path.$newName)

break

case 2://jpg

$result=imageJPEG($newImg, $this->path.$newName)

break

case 3://png

$return=imagepng($newImg, $this->path.$newName)

break

}

imagedestroy($newImg)

return $newName

}

/**

* 对图片加水印

* 参数对应:需水印图片 水印图片 加水印后图片名前缀

*/

function waterMark($name,$wname,$pre="wa_"){

if(file_exists($this->path.$name)){

if(file_exists($this->path.$wname)){

$info=$this->getInfo($name)

$winfo=$this->getInfo($wname)

if($p=$this->getPosition($info,$winfo)){

$img=$this->getImg($name,$info)

$wImg=$this->getImg($wname,$winfo)

imagecopy($img, $wImg, $p["x"], $p["y"], 0, 0, $winfo["width"], $winfo["height"])

imagedestroy($wImg)

return $this->createNewImage($img,$pre.$name,$info)

}else{

echo '水印图片尺寸大于原图片尺寸'

}

}else{

echo '水印图片'.$this->path.$wname.'不存在,请检查文件名及路径是否填写正确'

}

}else{

echo '图片'.$this->path.$name.'不存在,请检查文件名及路径是否填写正确'

}

}

//辅助图片处理,获取水印图片应处坐标

private function getPosition($info,$winfo){

if($info['width']<$winfo['width']||$info['height']<$winfo['height']){

return false

}

$x=$info['width']-$winfo['width']

$y=$info['height']-$winfo['height']

return array('x'=>$x,'y'=>$y)

}

/**

* 图片剪切函数

* 对应参数:原图片 X坐标 Y坐标 宽度 高度

*/

function cut($name,$x,$y,$width,$height,$pre='cx_'){

$imgInfo=$this->getInfo($name)

$img=$this->getImg($name,$imgInfo)

$newImg=imagecreatetruecolor($width,$height)

imagecopyresampled($newImg,$img,0,0,$x,$y,$width,$height,$width,$height)

return $this->createNewImage($newImg, $pre.$name, $imgInfo)

}

}

批量给图片添加水印的方法:

第1步,先下载软件然后安装打开,点击软件界面左边最上面的【图片水印】功能,然后点击【添加文件】按钮,将需要添加水印的图片导入到软件中,支持批量导入和批量处理。

第2步,图片导入成功后在软件右下方进行设置:水印类型选择“图片水印”,选择单个或者多个;然后上传图片logo,设置logo的缩放比例/透明度/旋转角度;最后设置水印的位置、水印密度(数量)等。

第3步,在上方可以实时预览到添加水印后的样子,方便及时调整,点开还可以放大预览。没问题后就可以点击【开始转换】按钮启动软件了。

第4步,随后软件会自动打开一个文件夹,所有添加水印后的图片会被保存到这里。可以看到所有图片都成功添加了logo水印。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11717280.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-18
下一篇2023-05-18

发表评论

登录后才能评论

评论列表(0条)

    保存