欧美xxxxxbbbb_久久国内精品自在自线_日韩中文字幕在线一区二区三区_强行灌满h校园催眠

登錄

php如何實(shí)現(xiàn)圖片合并功能

php筆記 置頂
0 1608

在實(shí)際的開(kāi)發(fā)中需要用到合并圖片的功能,比如實(shí)現(xiàn)微信中的頭像圖片合并功能。

這里主要是使用的gd庫(kù)去操作的,當(dāng)然還可以用ImageMagick去實(shí)現(xiàn)這個(gè)功能。

效果如下:

如何用php gd庫(kù)實(shí)現(xiàn)微信中的圖片合并功能

php代碼:

  1. $pics   = array(
  2.     '1.jpg'
  3.     '2.jpg'
  4.     '3.jpg'
  5.     '4.jpg'
  6.     '5.jpg'
  7.     '6.jpg'
  8.     '7.jpg'
  9.     '8.jpg'
  10.     '9.jpg'
  11. );
  12.  
  13. $pic_list    = array_slice($pics 0 9); // 只操作前9個(gè)圖片
  14.  
  15. $bg_w    = 200; // 背景圖片寬度
  16. $bg_h    = 200; // 背景圖片高度
  17.  
  18. $background = imagecreatetruecolor($bg_w$bg_h); // 背景圖片
  19. $color   = imagecolorallocate($background 255 255 255); // 為真彩色畫(huà)布創(chuàng)建白色背景,再設(shè)置為透明
  20. imagefill($background 0 0 $color);
  21. imageColorTransparent($background $color);
  22.  
  23. $pic_count  = count($pic_list);
  24. $lineArr    = array();  // 需要換行的位置
  25. $space_x    = 3;
  26. $space_y    = 3;
  27. $line_x  = 0;
  28. switch($pic_count) {
  29.     case 1: // 正中間
  30.         $start_x    = intval($bg_w/4);  // 開(kāi)始位置X
  31.         $start_y    = intval($bg_h/4);  // 開(kāi)始位置Y
  32.         $pic_w   = intval($bg_w/2); // 寬度
  33.         $pic_h   = intval($bg_h/2); // 高度
  34.         break;
  35.     case 2: // 中間位置并排
  36.         $start_x    = 2;
  37.         $start_y    = intval($bg_h/4) + 3;
  38.         $pic_w   = intval($bg_w/2) - 5;
  39.         $pic_h   = intval($bg_h/2) - 5;
  40.         $space_x    = 5;
  41.         break;
  42.     case 3:
  43.         $start_x    = 40;   // 開(kāi)始位置X
  44.         $start_y    = 5;    // 開(kāi)始位置Y
  45.         $pic_w   = intval($bg_w/2) - 5; // 寬度
  46.         $pic_h   = intval($bg_h/2) - 5; // 高度
  47.         $lineArr    = array(2);
  48.         $line_x  = 4;
  49.         break;
  50.     case 4:
  51.         $start_x    = 4;    // 開(kāi)始位置X
  52.         $start_y    = 5;    // 開(kāi)始位置Y
  53.         $pic_w   = intval($bg_w/2) - 5; // 寬度
  54.         $pic_h   = intval($bg_h/2) - 5; // 高度
  55.         $lineArr    = array(3);
  56.         $line_x  = 4;
  57.         break;
  58.     case 5:
  59.         $start_x    = 30;   // 開(kāi)始位置X
  60.         $start_y    = 30;   // 開(kāi)始位置Y
  61.         $pic_w   = intval($bg_w/3) - 5; // 寬度
  62.         $pic_h   = intval($bg_h/3) - 5; // 高度
  63.         $lineArr    = array(3);
  64.         $line_x  = 5;
  65.         break;
  66.     case 6:
  67.         $start_x    = 5;    // 開(kāi)始位置X
  68.         $start_y    = 30;   // 開(kāi)始位置Y
  69.         $pic_w   = intval($bg_w/3) - 5; // 寬度
  70.         $pic_h   = intval($bg_h/3) - 5; // 高度
  71.         $lineArr    = array(4);
  72.         $line_x  = 5;
  73.         break;
  74.     case 7:
  75.         $start_x    = 53;   // 開(kāi)始位置X
  76.         $start_y    = 5;    // 開(kāi)始位置Y
  77.         $pic_w   = intval($bg_w/3) - 5; // 寬度
  78.         $pic_h   = intval($bg_h/3) - 5; // 高度
  79.         $lineArr    = array(25);
  80.         $line_x  = 5;
  81.         break;
  82.     case 8:
  83.         $start_x    = 30;   // 開(kāi)始位置X
  84.         $start_y    = 5;    // 開(kāi)始位置Y
  85.         $pic_w   = intval($bg_w/3) - 5; // 寬度
  86.         $pic_h   = intval($bg_h/3) - 5; // 高度
  87.         $lineArr    = array(36);
  88.         $line_x  = 5;
  89.         break;
  90.     case 9:
  91.         $start_x    = 5;    // 開(kāi)始位置X
  92.         $start_y    = 5;    // 開(kāi)始位置Y
  93.         $pic_w   = intval($bg_w/3) - 5; // 寬度
  94.         $pic_h   = intval($bg_h/3) - 5; // 高度
  95.         $lineArr    = array(47);
  96.         $line_x  = 5;
  97.         break;
  98. }
  99. foreach( $pic_list as $k=>$pic_path ) {
  100.     $kk = $k + 1;
  101.     if ( in_array($kk $lineArr) ) {
  102.         $start_x    = $line_x;
  103.         $start_y    = $start_y + $pic_h + $space_y;
  104.     }
  105.     $pathInfo    = pathinfo($pic_path);
  106.     switch( strtolower($pathInfo['extension']) ) {
  107.         case 'jpg':
  108.         case 'jpeg':
  109.             $imagecreatefromjpeg    = 'imagecreatefromjpeg';
  110.             break;
  111.         case 'png':
  112.             $imagecreatefromjpeg    = 'imagecreatefrompng';
  113.             break;
  114.         case 'gif':
  115.         default:
  116.             $imagecreatefromjpeg    = 'imagecreatefromstring';
  117.             $pic_path    = file_get_contents($pic_path);
  118.             break;
  119.     }
  120.     $resource   = $imagecreatefromjpeg($pic_path);
  121.     // $start_x$start_y copy圖片在背景中的位置
  122.     // 00 被copy圖片的位置
  123.     // $pic_w$pic_h copy后的高度和寬度
  124.     // 最后兩個(gè)參數(shù)為原始圖片寬度和高度,倒數(shù)兩個(gè)參數(shù)為copy時(shí)的圖片寬度和高度
  125.     imagecopyresized($background$resource$start_x$start_y00$pic_w$pic_himagesx($resource)imagesy($resource));
  126.     $start_x    = $start_x + $pic_w + $space_x;
  127. }
  128.  
  129. header("Content-type: image/jpg");
  130. imagejpeg($background);

發(fā)表評(píng)論

0 個(gè)回復(fù)

admin

admin

154 2017-05-15 加入 揚(yáng)州

(淘寶搜索店鋪:程序員小店)

熱門(mén)標(biāo)簽