php 圖片添加文字水印 以及 圖片合成


一、圖片添加文字水印:

<?php
$bigImgPath = 'background.png';
$img = imagecreatefromstring(file_get_contents($bigImgPath));

$font = 'msyh.ttf';//字體,字體文件需保存到相應文件夾下
$black = imagecolorallocate($img, 0, 0, 0);//字體顏色 RGB

$fontSize = 12;   //字體大小
$circleSize = 60; //旋轉角度
$left = 50;      //左邊距
$top = 150;       //頂邊距

imagefttext($img, $fontSize, $circleSize, $left, $top, $black, $font, 'zhix.net| 智昕網絡');

list($bgWidth, $bgHight, $bgType) = getimagesize($bigImgPath);
switch ($bgType) {
    case 1: //gif
        header('Content-Type:image/gif');
        imagegif($img);
        break;
    case 2: //jpg
        header('Content-Type:image/jpg');
        imagejpeg($img);
        break;
    case 3: //png
        header('Content-Type:image/png');
        imagepng($img,"images/circle.png");  //在 images 目錄下就會生成一個 circle.png 文件,上面也可設置相應的保存目錄及文件名。
        break;
    default:
        break;
}
imagedestroy($img);

 效果如下:

 

二、合成二維碼

<?php
$bigImgPath = 'background.png';
$qCodePath = 'code.png';

$bigImg = imagecreatefromstring(file_get_contents($bigImgPath));
$qCodeImg = imagecreatefromstring(file_get_contents($qCodePath));
imagesavealpha($bigImg,true);//假如是透明PNG圖片,這里很重要 意思是不要丟了圖像的透明
list($qCodeWidth, $qCodeHight, $qCodeType) = getimagesize($qCodePath);
// imagecopymerge使用注解
imagecopymerge($bigImg, $qCodeImg, 50, 50, 0, 0, $qCodeWidth, $qCodeHight, 100);
list($bigWidth, $bigHight, $bigType) = getimagesize($bigImgPath);

switch ($bigType) {
    case 1: //gif
        header('Content-Type:image/gif');
        imagegif($bigImg);
        break;
    case 2: //jpg
        header('Content-Type:image/jpg');
        imagejpeg($bigImg);
        break;
    case 3: //jpg
        header('Content-Type:image/png');
        imagepng($bigImg,"images/circle.png");  //在 images 目錄下就會生成一個 circle.png 文件,上面也可設置相應的保存目錄及文件名。
        break;
    default:
        # code...
        break;
}
imagedestroy($bigImg);
imagedestroy($qcodeImg);

合成的效果如下:

 

如果感覺上面的二維碼太大  那么可以先生成一張小的二維碼圖片,下面是處理的方法

<?php
$bigImgPath = 'background.png';
$qCodePath = 'code.png';
imagepress($qCodePath);
$qCodePath = 'code1.png';
$bigImg = imagecreatefromstring(file_get_contents($bigImgPath));
$qCodeImg = imagecreatefromstring(file_get_contents($qCodePath));
//$qCodeImg = myImageResize($qCodeImg, 200, 200); //最大寬高

list($qCodeWidth, $qCodeHight, $qCodeType) = getimagesize($qCodePath);
// imagecopymerge使用注解
imagecopymerge($bigImg, $qCodeImg, 50, 50, 0, 0, $qCodeWidth, $qCodeHight, 100);
list($bigWidth, $bigHight, $bigType) = getimagesize($bigImgPath);

switch ($bigType) {
    case 1: //gif
        header('Content-Type:image/gif');
        imagegif($bigImg);
        break;
    case 2: //jpg
        header('Content-Type:image/jpg');
        imagejpeg($bigImg);
        break;
    case 3: //jpg
        header('Content-Type:image/png');
        imagepng($bigImg,"images/circle.png");  //在 images 目錄下就會生成一個 circle.png 文件,上面也可設置相應的保存目錄及文件名。
        break;
    default:
        # code...
        break;
}
imagedestroy($bigImg);
imagedestroy($qcodeImg);



//等比例生成圖片
//$filepath圖片路徑,$percent縮放百分比
function imagepress($filepath,$percent='0.5'){
    // 圖片類型,這里的二維碼是PNG的   所以使用PNG類型
    header('Content-Type: image/png');
    // 獲得新的圖片大小
    list($width, $height) = getimagesize($filepath);  //取圖片信息
    $new_width = $width * $percent;
    $new_height = $height * $percent;
    // 重新取樣
    $image_p = imagecreatetruecolor($new_width, $new_height);
    $image = imagecreatefrompng($filepath);
    imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
    // 輸出
    return imagejpeg($image_p, 'code1.png', 100);  //這里的名命可根據需要設置
}

效果如下:

 

 

imagecopymerge語法:
imagecopymerge( resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y,
 int src_w, int src_h, int pct )

imagecopymerge() 函數用於拷貝並合並圖像的一部分,成功返回 TRUE ,否則返回 FALSE

參數 說明
dst_im 目標圖像
src_im 被拷貝的源圖像
dst_x 目標圖像開始 x 坐標
dst_y 目標圖像開始 y 坐標,x,y同為 0 則從左上角開始
src_x 拷貝圖像開始 x 坐標
src_y 拷貝圖像開始 y 坐標,x,y同為 0 則從左上角開始拷貝
src_w (從 src_x 開始)拷貝的寬度
src_h (從 src_y 開始)拷貝的高度
pct 圖像合並程度,取值 0-100 ,當 pct=0 時,實際上什么也沒做,反之完全合並。

 當為 pct = 100 時對於調色板圖像本函數和 imagecopy() 完全一樣,參考閱讀:

imagecopy():拷貝圖像或圖像的一部分。

該函數的一個典型應用就是將圖像打上水印標識:

<?
header("Content-type: image/jpeg");

//原始圖像
$dst = "images/flower_1.jpg";

//得到原始圖片信息
$dst_im = imagecreatefromjpeg($dst);
$dst_info = getimagesize($dst);

//水印圖像
$src = "images/logo.gif";
$src_im = imagecreatefromgif($src);
$src_info = getimagesize($src);	

//水印透明度
$alpha = 30;

//合並水印圖片
imagecopymerge($dst_im,$src_im,$dst_info[0]-$src_info[0],$dst_info[1]-$src_info[1],0,0,$src_info[0],
$src_info[1],$alpha);

//輸出合並后水印圖片
imagejpeg($dst_im);
imagedestroy($dst_im);
imagedestroy($src_im);
?>

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM