侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

php+js实现裁剪任意形状图片

Go  /  管理员 发布于 5年前   523

最近做到相关的项目,由于项目使用html2canvas,但是不支持css mask属性,故,利用php后台来裁剪。

准备两张图片,一张是镂空PNG图案,一张是任意纯色图片。

便能够在纯色图片上裁剪出镂空的图案为PNG文件。

见下图。

首先两张PNG图片:

生成图片

 JS片段:

html2canvas($(".head1pic"), {     onrendered: function(canvas) {      url = canvas.toDataURL("image/png", 1.0);       sourcePic = "assets/images/demo.png";       maskPic = "assets/images/jinmao.png";          cropPicName = "cropDog1";          // ajax php截图          $.ajax({          type: 'post',           url: 'getpicture',          data: {            "sourcePic": sourcePic,            "maskPic": maskPic,            "cropPicName": cropPicName            },         success: function(data) {             $(".page2Bg")[0].setAttribute("src", "assets/images/crop/cropDog1.png");             },         error: function(data) {              console.log(data)              }            });       } });

PHP的片段:

 public function actionGetpicture()  {       $request = Yii::$app->request;    $sourcePic=$request->post('sourcePic');    $maskPic=$request->post('maskPic');     $cropPicName=$request->post('cropPicName');      // $sourcePic="http://bings.local.com/bi_ngs2_2/assets/images/yinpian1/page2Bg4.png";    // $maskPic="http://bings.local.com/bi_ngs2_2/assets/images/jinmao.png";    $source = imagecreatefrompng( $sourcePic );    $mask = imagecreatefrompng( $maskPic);     // Apply mask to source    // imagealphamask( $source, $mask );    $this->imagealphamask ($source, $mask );    // Output    header( "Content-type: image/png");     // 生成截取后的图片并保存在本地    imagepng( $source,"assets/images/crop/".$cropPicName.".png" );    //销毁图片内存    imagedestroy($source);        }   public function imagealphamask( &$picture, $mask ) {    // Get sizes and set up new picture    $xSize = imagesx( $picture );    $ySize = imagesy( $picture );    $newPicture = imagecreatetruecolor( $xSize, $ySize );    imagesavealpha( $newPicture, true );    imagefill( $newPicture, 0, 0, imagecolorallocatealpha( $newPicture, 100, 100, 0, 127 ) );     // Resize mask if necessary    // if( $xSize != imagesx( $mask ) || $ySize != imagesy( $mask ) ) {    //   $tempPic = imagecreatetruecolor( $xSize, $ySize );    //   imagecopyresampled( $tempPic, $mask, 0, 0, 0, 0, $xSize, $ySize, imagesx( $mask ), imagesy( $mask ) );    //   imagedestroy( $mask );    //   $mask = $tempPic;    // }     // Perform pixel-based alpha map application    for( $x = 0; $x < $xSize; $x++ ) {      for( $y = 0; $y < $ySize; $y++ ) {        $alpha = imagecolorsforindex( $mask, imagecolorat( $mask, $x, $y ) );        //small mod to extract alpha, if using a black(transparent) and white        //mask file instead change the following line back to Jules's original:        // $alpha = 127 - floor($alpha['black'] / 2);        //or a white(transparent) and black mask file:        // $alpha = floor($alpha['black'] / 2);        $alpha = $alpha['alpha'];        $color = imagecolorsforindex( $picture, imagecolorat( $picture, $x, $y ) );        //preserve alpha by comparing the two values        if ($color['alpha'] > $alpha)          $alpha = $color['alpha'];        //kill data for fully transparent pixels        if ($alpha == 127) {          $color['red'] = 0;          $color['blue'] = 0;          $color['green'] = 0;        }        imagesetpixel( $newPicture, $x, $y, imagecolorallocatealpha( $newPicture, $color[ 'red' ], $color[ 'green' ], $color[ 'blue' ], $alpha ) );      }    }     // Copy back to original picture    imagedestroy( $picture );    $picture = $newPicture;  } 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

您可能感兴趣的文章:

  • PHP图片裁剪函数(保持图像不变形)
  • php+js实现图片的上传、裁剪、预览、提交示例
  • php使用imagick模块实现图片缩放、裁剪、压缩示例
  • 使用gd库实现php服务端图片裁剪和生成缩略图功能分享
  • php图片的裁剪与缩放生成符合需求的缩略图
  • PHP图片处理之使用imagecopyresampled函数裁剪图片例子
  • PHP 裁剪图片成固定大小代码方法
  • PHP加Nginx实现动态裁剪图片方案
  • thinkPHP框架实现图像裁剪、缩放、加水印的方法
  • PHP图像裁剪缩略裁切类源码及使用方法


  • 上一条:
    golang gorm中格式化时间问题详解
    下一条:
    golang grpc 负载均衡的方法
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • 近期文章
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2017-09
    • 2020-03
    • 2020-05
    • 2020-06
    • 2020-07
    • 2020-12
    • 2021-01
    • 2021-05
    • 2021-06
    • 2021-07
    • 2021-08
    • 2021-10
    • 2021-11
    • 2021-12
    • 2022-01
    • 2022-02
    • 2022-03
    • 2022-04
    • 2022-05
    • 2022-06
    • 2022-07
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-02
    • 2023-03
    • 2023-04
    • 2023-05
    • 2023-06
    • 2023-07
    • 2023-08
    • 2023-09
    • 2023-10
    • 2023-11
    • 2023-12
    • 2024-01
    • 2024-02
    • 2024-03
    • 2024-04
    • 2024-05
    • 2024-06
    • 2024-07
    • 2024-08
    • 2024-11
    • 2025-02
    • 2025-04
    • 2025-05
    • 2025-06
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客