Home  >  Article  >  Backend Development  >  PHP implements adding a circular logo icon to the background image

PHP implements adding a circular logo icon to the background image

墨辰丷
墨辰丷Original
2018-05-30 17:07:002026browse

This article mainly introduces the method of adding a circular logo icon to the background image in PHP. It analyzes the operation steps and specific implementation techniques of adding the logo icon to the PHP background image in detail in the form of examples. Friends in need can refer to the following

Let’s talk about the steps:

There are 3 steps in total:

1. Compress the logo into a square image of a fixed size
2. Convert the logo into a circle Form logo
3. Merge the logo with the background image

Without further ado, let’s go directly to the code:

<?php
/**
 * 作者:friker
 * 开发时间:20160516
 * 功能:图片处理
 *
 */
class ImageController extends CI_Controller{
  public function __construct()
  {
    parent::__construct();
    date_default_timezone_set(&#39;Asia/Shanghai&#39;);
    error_reporting( E_ALL&~E_NOTICE&~E_WARNING);
    $this->load->library(&#39;curl&#39;);
  }
  /**
   * @todo : 本函数用于 将方形的图片压缩后
   *     再裁减成圆形 做成logo
   *     与背景图合并
   * @return 返回url
   */
  public function index(){
    //头像
    $headimgurl = &#39;a.jpg&#39;;
    //背景图
    $bgurl = &#39;./aa.png&#39;;
    $imgs[&#39;dst&#39;] = $bgurl;
    //第一步 压缩图片
    $imggzip = $this->resize_img($headimgurl);
    //第二步 裁减成圆角图片
    $imgs[&#39;src&#39;] = $this->test($imggzip);
    //第三步 合并图片
    $dest = $this->mergerImg($imgs);
  }
  public function resize_img($url,$path=&#39;./&#39;){
    $imgname = $path.uniqid().&#39;.jpg&#39;;
    $file = $url;
    list($width, $height) = getimagesize($file); //获取原图尺寸
    $percent = (110/$width);
    //缩放尺寸
    $newwidth = $width * $percent;
    $newheight = $height * $percent;
    $src_im = imagecreatefromjpeg($file);
    $dst_im = imagecreatetruecolor($newwidth, $newheight);
    imagecopyresized($dst_im, $src_im, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
    imagejpeg($dst_im, $imgname); //输出压缩后的图片
    imagedestroy($dst_im);
    imagedestroy($src_im);
    return $imgname;
  }
  //第一步生成圆角图片
  public function test($url,$path=&#39;./&#39;){
    $w = 110; $h=110; // original size
    $original_path= $url;
    $dest_path = $path.uniqid().&#39;.png&#39;;
    $src = imagecreatefromstring(file_get_contents($original_path));
    $newpic = imagecreatetruecolor($w,$h);
    imagealphablending($newpic,false);
    $transparent = imagecolorallocatealpha($newpic, 0, 0, 0, 127);
    $r=$w/2;
    for($x=0;$x<$w;$x++)
      for($y=0;$y<$h;$y++){
        $c = imagecolorat($src,$x,$y);
        $_x = $x - $w/2;
        $_y = $y - $h/2;
        if((($_x*$_x) + ($_y*$_y)) < ($r*$r)){
          imagesetpixel($newpic,$x,$y,$c);
        }else{
          imagesetpixel($newpic,$x,$y,$transparent);
        }
      }
    imagesavealpha($newpic, true);
    // header(&#39;Content-Type: image/png&#39;);
    imagepng($newpic, $dest_path);
    imagedestroy($newpic);
    imagedestroy($src);
    unlink($url);
    return $dest_path;
  }
  //php 合并图片
  public function mergerImg($imgs,$path=&#39;./&#39;) {
    $imgname = $path.rand(1000,9999).uniqid().&#39;.jpg&#39;;
    list($max_width, $max_height) = getimagesize($imgs[&#39;dst&#39;]);
    $dests = imagecreatetruecolor($max_width, $max_height);
    $dst_im = imagecreatefrompng($imgs[&#39;dst&#39;]);
    imagecopy($dests,$dst_im,0,0,0,0,$max_width,$max_height);
    imagedestroy($dst_im);
    $src_im = imagecreatefrompng($imgs[&#39;src&#39;]);
    $src_info = getimagesize($imgs[&#39;src&#39;]);
    imagecopy($dests,$src_im,270,202,0,0,$src_info[0],$src_info[1]);
    imagedestroy($src_im);
    // var_dump($imgs);exit;
    // header("Content-type: image/jpeg");
    imagejpeg($dests,$imgname);
    // unlink($imgs[&#39;dst&#39;]);
    unlink($imgs[&#39;src&#39;]);
    return $imgname;
  }
}

Result display:

The above is the entire content of this article, I hope it will be helpful to everyone's study.


Related recommendations:

Case discovery of several implementation methods to solve concurrency problems in PHP development

phpHow to solve the problem that the queried data is garbled and Chinese becomes Unicode when converted to json?

Tutorial on how to quickly export Table data with PHP

##

The above is the detailed content of PHP implements adding a circular logo icon to the background image. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn