• 图片合成


    1.数字生成图片

    public function wordImg($uuid){

    //创建一个长为500高为80的空白图片
    $im =imagecreate(3000,100);
    $background_color = imagecolorallocatealpha($im,255, 255, 255,127);
    $col = imagecolorallocate($im, 0, 0, 0);
    // $font="C:WindowsFontsARIALN.ttf"; //字体所放目录
    $font=ROOT_PATH.'public/upload/font/ARIALN.TTF'; //字体所放目录
    $come=iconv("gb2312","utf-8",$uuid);
    imagettftext($im,50,0,430,60,$col,$font,$come); //写 TTF 文字到图中
    $param = array();
    $param['code'] =$uuid;
    $spath = "shop/position/code/".implode('/', $param).".png";
    $ssavePath = ROOT_PATH.'public/upload/'.$spath;
    if(file_exists($ssavePath)){
    return cmf_get_image_preview_url($spath);
    }else{
    $info = pathinfo($ssavePath);
    if(!is_dir($info['dirname'])){
    mkdir($info['dirname'],0755,true);
    }
    imagepng($im, $ssavePath);
    return cmf_get_image_preview_url($spath);
    }

    }

    2.合并图片
    public function mergeImg($img1,$img2,$uuid){
    $ename=getimagesize($img1);
    $ename=explode('/',$ename['mime']);
    $ext=$ename[1];
    switch($ext){
    case "png":
    $image_1=imagecreatefrompng($img1);
    break;
    case "jpeg":
    $image_1=imagecreatefromjpeg($img1);
    break;
    case "jpg":
    $image_1=imagecreatefromjpeg($img1);
    break;
    case "gif":
    $image_1=imagecreatefromgif($img1);
    break;
    }

    $image_2 = imagecreatefrompng($img2); // 合成图片
    $im3 = imagecreatetruecolor(imagesx($image_1), imagesy($image_1) + imagesy($image_2));
    $_bg_color = imagecolorallocate($im3, 255,255,255); //创建颜色,返回颜色标识符
    imagefill($im3, 0, 0, $_bg_color); //初始化图像背景为$_bg_color
    imagecopymerge($im3, $image_1, 0, 0, 0, 0, imagesx($image_1), imagesy($image_1), 100);
    imagecopymerge($im3, $image_2, 0, imagesy($image_1), 0, 0, imagesx($image_2), imagesy($image_2), 100);

    $param = array();
    $param['code'] =$uuid;
    $path = "shop/position/".implode('/', $param).".png";
    $savePath = ROOT_PATH.'public/upload/'.$path;
    if(file_exists($savePath)){
    return cmf_get_image_preview_url($path);
    }else{
    $info = pathinfo($savePath);
    if(!is_dir($info['dirname'])){
    mkdir($info['dirname'],0755,true);
    }
    imagepng($im3, $savePath);
    return cmf_get_image_preview_url($path);
    }

    }

    //获取当前时间戳,精确到毫秒
    public static function getMillisecond(){
    list($msec, $sec) = explode(' ', microtime());
    $msectime = (float)sprintf('%.0f', (floatval($msec) + floatval($sec)) * 1000);
    return $msectimes = substr($msectime,0,13);
    }

    //裁剪图片
    public function cut($img,$uuid){
    $src = imagecreatefromstring(file_get_contents($img));

    //裁剪开区域左上角的点的坐标
    $x = 0;
    $y = 0;
    //裁剪区域的宽和高
    $percent = 0.85;
    list($width, $height) = getimagesize($img);
    $new_width = $width * $percent;
    $new_height = $height * $percent;
    //最终保存成图片的宽和高,和源要等比例,否则会变形

    //将裁剪区域复制到新图片上,并根据源和目标的宽高进行缩放或者拉升
    $new_image = imagecreatetruecolor($new_width, $new_height);
    imagecopyresampled($new_image, $src, 0, 0, $x, $y, $new_width, $new_height, $width, $height);
    //输出图片
    header('Content-Type: image/jpeg');
    $param = array();
    $param['code'] =$uuid;
    $path = "shop/position/".implode('/', $param).".png";
    $savePath = ROOT_PATH.'public/upload/'.$path;
    imagepng($new_image, $savePath);
    return cmf_get_image_preview_url($path);
    }
    //最终合成
    public function lastmarge($img,$uuid){
    // 图片一
    $path_1 = ROOT_PATH.'public/upload/shop/position/bg_img.jpg';
    // 创建图片对象
    $image_1 = imagecreatefromjpeg($path_1);
    $image_2 = imagecreatefrompng($img);
    // 合成图片
    imagecopymerge($image_1, $image_2, 135, 385, 0, 0, imagesx($image_2), imagesy($image_2), 100);
    // imagejpeg($src);
    $param = array();
    $param['code'] =$uuid;
    $path = "shop/position/".implode('/', $param).".png";
    $savePath = ROOT_PATH.'public/upload/'.$path;
    imagepng($image_1, $savePath);
    return ($savePath);
    }


    }

    5.方变圆

    //方变圆
    public function circular($imgpath){
    $ename=getimagesize($imgpath);
    $ename=explode('/',$ename['mime']);
    $ext=$ename[1];
    $src_img = null;
    switch($ext){
    case "png":
    $src_img=imagecreatefrompng($imgpath);
    break;
    case "jpeg":
    $src_img=imagecreatefromjpeg($imgpath);
    break;
    case "jpg":
    $src_img=imagecreatefromjpeg($imgpath);
    break;
    case "gif":
    $src_img=imagecreatefromgif($imgpath);
    break;
    }
    $wh = getimagesize($imgpath);
    $w = $wh[0];
    $h = $wh[1];
    $w = min($w, $h);
    $h = $w;
    $img =imagecreatetruecolor($w, $h);
    //这一句一定要有
    imagesavealpha($img, true);
    //拾取一个完全透明的颜色,最后一个参数127为全透明
    $bg = imagecolorallocatealpha($img, 255, 255, 255, 127);
    imagefill($img, 0, 0, $bg);
    $r = $w/2;//圆半径
    $y_x = $r;//圆心X坐标
    $y_y = $r;//圆心Y坐标
    for($x=0;$x<$w;$x++){
    for($y=0;$y<$h;$y++){
    $rgbColor = imagecolorat($src_img,$x,$y);
    if((($x - $r) * ($x - $r) + ($y - $r) * ($y - $r)) < ($r * $r)) {
    imagesetpixel($img, $x, $y, $rgbColor);
    }

    }
    }
    $param = array();
    $param['code'] =7;
    $path = "shop/position/".implode('/', $param).".png";
    $savePath = ROOT_PATH.'public/upload/'.$path;
    //return $img;
    imagepng($img, $savePath);
    imagedestroy($img);
    return cmf_get_image_preview_url($path);
    // return $img;
    }

    6.合并

    //合并背景图
    public function test($img,$uuid){
    //背景图片路径
    $srcurl = ROOT_PATH.'public/upload/shop/position/bg_img.jpg';
    //目标图片路径
    $desurl = $img;

    //创建源图的实例
    $src = imagecreatefromstring(file_get_contents($srcurl));
    //创建点的实例
    $des = imagecreatefrompng($desurl);
    //获取点图片的宽高
    list($point_w, $point_h) = getimagesize($desurl);

    //重点:png透明用这个函数
    imagecopy($src, $des, 113, 400, 0, 0, $point_w, $point_h);
    imagecopy($src, $des, 930, 1310, 0, 0, $point_w, $point_h);

    header('Content-Type: image/jpeg');
    $param = array();
    $param['code'] =$uuid;
    $path = "shop/position/".implode('/', $param).".png";
    $savePath = ROOT_PATH.'public/upload/'.$path;
    imagejpeg($src,$savePath);
    imagedestroy($src);
    imagedestroy($des);

    }

  • 相关阅读:
    2018 桂林ccpc现场赛 总结
    2018 南京icpc现场赛总结
    nowcoder 203J Graph Coloring I(dfs)
    nowcoder 203A Knight(贪心+打表)
    nowcoder 202H-卡牌游戏
    nowcoder 202F-平衡二叉树
    topcoder srm 738 div1 FindThePerfectTriangle(枚举)
    codeforces 1041 E.Vasya and Good Sequences(暴力?)
    hdu 3507 Print Article(dp+斜率优化)
    hdu 1007 Quoit Design(分治)
  • 原文地址:https://www.cnblogs.com/lele925/p/10405586.html
Copyright © 2020-2023  润新知