Maison  >  Article  >  développement back-end  >  PHP implémente l'ajout d'une icône de logo circulaire à l'image d'arrière-plan

PHP implémente l'ajout d'une icône de logo circulaire à l'image d'arrière-plan

墨辰丷
墨辰丷original
2018-05-30 17:07:002089parcourir

Cet article présente principalement la méthode d'ajout d'une icône de logo circulaire à l'image d'arrière-plan en PHP. Il analyse en détail les étapes de fonctionnement et les techniques de mise en œuvre spécifiques pour ajouter l'icône de logo à l'image d'arrière-plan PHP sous forme d'exemples. dans le besoin peuvent se référer à ce qui suit

Dites-moi les étapes :

Il y a 3 étapes au total :

1. Compressez le logo en une image carrée de. une taille fixe
2. Convertir le logo en cercle Façonner le logo
3 Fusionner le logo avec l'image de fond

Sans plus attendre, passons directement au 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;
  }
}

Affichage des résultats :

Ce qui précède représente l'intégralité du contenu de cet article , j'espère que cela sera utile à l'étude de chacun.


Recommandations associées :

Découverte de cas de plusieurs méthodes d'implémentation pour résoudre des problèmes de concurrence dans le développement PHP

phpComment résoudre le problème selon lequel les données interrogées sont tronquées et le code chinois est modifié en Unicode lors de la conversion en json ?

Tutoriel sur l'exportation rapide de données de table avec PHP

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn