您的位置 首页 php

php配合前端实现图片裁剪

使用php对图片进行放大缩进并裁剪

/*图片地址$obj->url 图片的宽,比如放大或缩小后的图片,如果图片宽本来是100,你把他放大到200,那这里就填200$obj->largeWidth 图片的高,同上$obj->largeHeight 新图的宽,比如你把图片从100放大到200,且只要其中的150,那这里就填150$obj->newWidth 新图的高,同上$obj->newHeight 新图相对于原图的的水平偏移,注意,这里的原图是指放大或缩小之后的图片,就拿上面的讲,你的图片是100*200,当是你放大到 200*400, 现在你只要 150*150,而且你要最中心的位置,即在 200*400 的大小中 在最中间的位置 裁剪 150*150 这时候 $obj->x 就应该是 (200-150)/2 = 25 , $obj->y 就应该是 (400-150)/2 = 125$obj->x $obj->x*/<?phpfunction clipping($obj){ //输出裁剪图片  $info=getimagesize($obj->url);  $w=$info[0]; $h=$info[1];  switch($info[2]){ case 1: $largeImage=imagecreatefromgif($obj->url);  break ; case 2: $largeImage=imagecreatefromjpeg($obj->url); break; case 3: $largeImage=imagecreatefrompng($obj->url); break; }  //创建一张临时图片,图片的width和height是放大或缩小之后的 $tempImage=imagecreatetruecolor($obj->largeWidth,$obj->largeHeight);  //把即将要裁剪的图片放进这张临时图片 imagecopyresampled($tempImage,$largeImage,0,0,0,0,$obj->largeWidth,$obj->largeHeight,$w,$h);  //销毁原图,因为现在已经有一张临时图片了 imagedestroy($largeImage);  //创建一张新图,这张新图就是就要裁剪的大小 $newImage = imagecreatetruecolor($obj->newWidth,$obj->newHeight); // 把临时图片放进裁剪图片,参数已在上面说明了 imagecopyresampled($newImage,$tempImage,0,0,$obj->x,$obj->y,$obj->newWidth,$obj->newHeight,$obj->newWidth,$obj->newHeight);  //销毁临时图片 imagedestroy($tempImage);  //直接在浏览器输出图片,输出前先执行 ob_clean();不然可能出现输出失败 ob_clean(); switch($info[2]){ case 1:  header ('Content-Type:image/gif'); imagegif($newImage);  break; case 2: header('Content-Type:image/ jpeg '); imagejpeg($newImage); break; case 3: header('Content-Type:image/ png '); imagepng($newImage); break; } //在浏览器输出之后就可以销毁了 imagedestroy($newImage); }?> 

效果图,配合前端

da7f25646af043ecbff544ed7de01bc6

效果图,配合前端使用

点击确定后,前端像后端发送一组数据

c3c309826bb149d2bc135268df49f36f

这个url可能有点奇怪,但我的后台有特殊功能所以这个URL是正常的,你们测试改为正常的本地路径即可,注意,这组数据可不是对应上面的动态图,你们测试的时候呢可以找一张100*200的图,然后largeWidth=200,largeHeight=400,这样就相当于把这张图片放大两倍,接着裁剪100*200,这个时候裁剪100*200就是一半,因为你已经放大两倍了嘛,裁剪最中间的位置,x=50,y=100。注意,我的数据是对象类型,你们可以自行改为数组,方法里面也要改,当然最好传一个对象这样方法里面就不用改了。

<?php //后端测试  $obj=new stdClass(); $obj->largeWidth=200; $obj->largeHeight=400; $obj->newWidth=100; $obj->newHeight=200; $obj->x=50; $obj->y=100; $obj->url='地址'; //找一张 100*200 的图像效果最好或者找 1:2 的 clipping($obj); //把对象传进行即可 ?>  

如果你想保存到本地那就在 imagegif 和 imagejpeg 和 imagepng 方法里面加上第二个参数,把要保存的地址放进去,地址是完整的包含文件名的地址。

文章来源:智云一二三科技

文章标题:php配合前端实现图片裁剪

文章地址:https://www.zhihuclub.com/30413.shtml

关于作者: 智云科技

热门文章

网站地图