ホームページ > バックエンド開発 > PHPチュートリアル > PHP imagecopy() と imagecopymerge() を使用して画像にウォーターマークを追加する_PHP チュートリアル

PHP imagecopy() と imagecopymerge() を使用して画像にウォーターマークを追加する_PHP チュートリアル

WBOY
リリース: 2016-07-13 10:46:16
オリジナル
1045 人が閲覧しました

PHP で画像にウォーターマークを追加する方法は数多くありますが、これらの関数はすべて PHP の GD ライブラリに基づいています。GD ライブラリのアカウントを持っていない場合は、ウォーターマーク機能を使用できません。

imagecopymerge() 関数は、画像の一部をコピーして結合するために使用され、成功した場合は TRUE を返し、それ以外の場合は FALSE を返します。

Windows で PHP GD ライブラリのサポートを有効にする

php.ini を見つけてコンテンツを開いて、次の内容を見つけます:

;拡張子=php_gd2.dll

先頭のセミコロン「;」を削除して保存します。最初からセミコロンがない場合は、すでに有効になっていることを意味します

基本文法

bool 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 )

パラメータの説明: パラメータの説明

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()とまったく同じです

使い方がわかれば、次のコードで簡単に関数を実装できます

コードは次のとおりです コードをコピー

header("コンテンツタイプ: 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);

//透かしの透明度
$アルファ = 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);
?>

新しいバージョン以降、imagecopymerge 関数はほとんど使用されなくなり、imagecopy を直接使用してウォーターマークを生成できるようになりました。この 2 つの関数の機能はまったく同じです。

//增加水印
$watermark =1;
$watertype =2;
$waterstring =''; 
$waterimg="z.png";    //水印图片
$sFilePath ='aa.jpg';
if($watermark==1)
{
 $image_size = getimagesize($sFilePath); // 上の写真
 $water_size = getimagesize($waterimg);  //水印写真
 $iinfo=getimagesize($sFilePath,$iinfo);
 $nimage=imagecreatetruecolor($image_size[0],$image_size[1]);
 $white=imagecolorallocate($nimage,255,255,255);
 $black=imagecolorallocate($nimage,0,0,0);
 $red=imagecolorallocate($nimage,255,0,0);
 imagefill($nimage,0,0,$white);
 スイッチ ($iinfo[2])
 {
  ケース 1:
   $simage =imagecreatefromgif($sFilePath);
   壊す;
  ケース 2:
   $simage =imagecreatefromjpeg($sFilePath);
   壊す;
  ケース 3:
   $simage =imagecreatefrompng($sFilePath);
   壊す;
// ケース 6:
// $simage =imagecreatefromwbmp($sFilePath);
// 壊す;
  デフォルト:
   die("サポートされていない文書の種類");
   出口;
 }
 
 imagecopy($nimage,$simage,0,0,0,0,$image_size[0],$image_size[1]);
 
 スイッチ($watertype)
 {
  case 1: //加水注目符串
   imagestring($nimage,2,3,$image_size[1]-15,$waterstring,$black);
   壊す;
  case 2: //加水印图片
   $simage1 =imagecreatefrompng($waterimg);     
   $x= $image_size[0]-$water_size[0];
   $y= $image_size[1]-$water_size[1];
   imagecopy($nimage,$simage1,$x,$y,0,0,240,65);
   imagedestroy($simage1);
   壊す;
 }
    
 スイッチ ($iinfo[2])
 {
  ケース 1:
   imagegif($nimage, $sFilePath);
// imagejpeg($nimage, $sFilePath);
   壊す;
  ケース 2:
   imagejpeg($nimage, $sFilePath);
   壊す;
  ケース 3:
   imagepng($nimage, $sFilePath);
   壊す;
// ケース 6:
// imagewbmp($nimage, $sFilePath);
// //imagejpeg($nimage, $sFilePath);
// 壊す;
 }
 
 //上盖原上传文件
 imagedestroy($nimage);
 imagedestroy($simage);
}

サムネイルを生成し、写真に透かしを追加できる優れた機能


/***
写真を加工したい
まず、画像のサイズとタイプの情報を取得する必要があります

ウォーターマーク: 指定したウォーターマークをターゲットにコピーし、透明効果を追加します

サムネイル: 大きな画像を小さなサイズの画面にコピーすることです
***/

コードは次のとおりです コードをコピー

クラス ImageTool {
// imageInfo は画像情報を分析します
// array() を返す
パブリック静的関数 imageInfo($image) {
// 画像が存在するかどうかを判断します
If (!file_exists($image)) {
false を返す;                                                                         
$info = getimagesize($image);
If ($info == false) {
false を返す;                                                                         
// このとき、情報は解析され配列になります
$img['width'] = $info[0]; $img['高さ'] = $info[1]; $img['ext'] = substr($info['mime'], strpos($info['mime'], '/') + 1);
$img を返す; }

/*
ウォーターマーク機能
Parm String $dst とその他の操作の写真
Parm String $water 透かし画像
Parm String $save、入力しない場合、デフォルトで元の画像が置き換えられます
*/
パブリック静的関数 Water($dst, $water, $save = NULL, $pos = 2, $alpha = 50) {
// 最初に 2 つの写真が存在することを確認してください
If (!file_exists($dst) || !file_exists($water)) {
false を返す;                                                                         
// まず、ウォーターマークが操作対象の画像より大きくならないことを確認してください
$dinfo = self::imageInfo($dst); $wininfo = self::imageInfo($water);
If ($winfo['height'] > $dinfo['height'] || $winfo['width'] > $dinfo['width']) {
false を返す;                                                                         
// 2 つの写真をキャンバス上で読み取ります。しかし、写真は png または jpeg である可能性があります。読み取るにはどの関数を使用する必要がありますか? $dfunc = 'imagecreatefrom'
$wfunc = 'imagecreatefrom'

If (!function_exists($dfunc) || !function_exists($wfunc)) {
false を返す;                                                                         
// 関数を動的にロードしてキャンバスを作成します
$dim = $dfunc($dst); // 操作対象のキャンバスを作成します
$wim = $wfunc($water); // 透かしキャンバスを作成します

// ウォーターマークの位置に基づいて貼り付けた座標を計算します
スイッチ($pos) {
ケース 0 :
// 左上隅
$posx = 0; $posy = 0;                壊す; 
 
            ケース 1 :
                // 右上角
                $posx = $dinfo['width'] - $winfo['width']; 
                $posy = 0; 
                壊す; 
 
            ケース 3 :
                // 左下角
                $posx = 0; 
                $posy = $dinfo['身長'] - $winfo['身長']; 
                壊す; 
 
            デフォルト:
                $posx = $dinfo['width'] - $winfo['width']; 
                $posy = $dinfo['身長'] - $winfo['身長']; 
        }
 
        // 加水印
        imagecopymerge($dim, $wim, $posx, $posy, 0, 0, $winfo['width'], $winfo['height'], $alpha); 
 
        // 保存
        if (!$save) {
            $save = $dst; 
            リンク解除($dst); 
            // 删除原图
        }
 
        $createfunc = 'イメージ' 。 $dinfo['ext']; 
        $createfunc($dim, $save); 
 
        imagedestroy($dim); 
        imagedestroy($wim); 
 
        true を返します。 
    }
 
    /**
親指 サムネイルを生成
比例して拡大縮小し、両側を空白のままにしておきます
**/
    パブリック静的関数thumb($dst, $save = NULL, $width = 200, $height = 200) {
        // 最初に処理待ちの画像が存在しません
        $dinfo = self::imageInfo($dst); 
        if ($dinfo == false) {
            false を返します。 
        }
 
        // 计算缩放比
        $calc = min($width / $dinfo['width'], $height / $dinfo['height']); 
 
        // 创建原始图的画布
        $dfunc = 'imagecreatefrom' 。 $dinfo['ext']; 
        $dim = $dfunc($dst); 
 
        // 创建缩略画布
        $tim = imagecreatetruecolor($width, $height); 
 
        // 创建白色充填缩略画布
        $white = imagecolorallocate($tim, 255, 255, 255); 
 
        // 充填缩略画布
        imagefill($tim, 0, 0, $white); 
 
        // 复制并缩略
        $dwidth = (int)$dinfo['width'] * $calc; 
        $dheight = (int)$dinfo['height'] * $calc; 
 
        $paddingx = (int)($width - $dwidth) / 2; 
        $paddingy = (int)($height - $dheight) / 2; 
 
        imagecopyresampled($tim, $dim, $paddingx, $paddingy, 0, 0, $dwidth, $dheight, $dinfo['width'],

$dinfo['身長']); 
 
        // 写真を保存
        if (!$save) {
            $save = $dst; 
            リンク解除($dst); 
        }
 
        $createfunc = 'イメージ' 。 $dinfo['ext']; 
        $createfunc($tim, $save); 
 
        imagedestroy($dim); 
        imagedestroy($tim); 
 
        true を返します。 
 
    }
 
}

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/632955.html技術記事画像 ウォータープリントの追加 php ではさまざまな方法が実行できますが、これらの機能はすべて php の GD に基づいており、ウォータープリント機能がない場合は使用できません。
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート