图像处理库 gd_使用PHP和GD对图像进行水印处理

图像处理库 gd

Watermark processing on images using PHP and GD
Watermark processing on images using PHP and GD

Image watermark with PHP and GD. Today is interesting tutorial for PHP. I will show you how to use GD library. And, main task today is adding watermark to image and generate result as PNG image into browser. We will using PHP and GD library. This is nice library to work with images at server side. Also (as additional tasks) I will draw little frame over image and will draw some text. Between, you can use this method (of adding watermarks in realtime) to protect original photos.

使用PHP和GD的图像水印。 今天是一个有趣PHP教程。 我将向您展示如何使用GD库。 并且,当今的主要任务是向图像添加水印,并将结果作为PNG图像生成到浏览器中。 我们将使用PHP和GD库。 这是在服务器端使用图像的不错的库。 另外(作为附加任务),我将在图像上绘制一点框架并绘制一些文本。 在两者之间,您可以使用此方法(实时添加水印)来保护原始照片。

现场演示

[sociallocker]

[社交储物柜]

打包下载

[/sociallocker]

[/ sociallocker]

Now – download the source files and lets start coding !

现在–下载源文件并开始编码!

步骤1. PHP (Step 1. PHP)

Yes, today we will start directly from PHP step. Just because we don`t need anything – just generate result with PHP.

是的,今天我们将直接从PHP步骤开始。 仅仅因为我们不需要任何东西,而是用PHP生成结果。

index.php (index.php)

<?php
    if (! extension_loaded('gd')) { // small check - are GD installed or not
        echo 'GD not installed, please install';
        exit;
    }
    $sOrigImg = "pic1.jpg";
    $sWmImg = "watermark.png";
    $aImgInfo = getimagesize($sOrigImg);
    $aWmImgInfo = getimagesize($sWmImg);
    if (is_array($aImgInfo) && count($aImgInfo)) {
        header ("Content-type: image/png");
        $iSrcWidth = $aImgInfo[0];
        $iSrcHeight = $aImgInfo[1];
        $iFrameSize = 15;
        $rImage = imagecreatetruecolor($iSrcWidth+$iFrameSize*2, $iSrcHeight+$iFrameSize*2); // creating new true color image
        $rSrcImage = imagecreatefromjpeg($sOrigImg); //  creating source image resource
        $rWmImage = imagecreatefrompng($sWmImg); //  creating watermark image resource
        $aGrid[1] = imagecolorallocate($rImage, 130, 130, 130); // define colors for rectangular frame
        $aGrid[2] = imagecolorallocate($rImage, 150, 150, 150);
        $aGrid[3] = imagecolorallocate($rImage, 170, 170, 170);
        $aGrid[4] = imagecolorallocate($rImage, 190, 190, 190);
        $aGrid[5] = imagecolorallocate($rImage, 210, 210, 210);
        for ($i=1; $i<=5; $i++) { // our little frame will contain 5 rectangulars to emulate gradient
            imagefilledrectangle($rImage, $i*3, $i*3, ($iSrcWidth+$iFrameSize*2)-$i*3, ($iSrcHeight+$iFrameSize*2)-$i*3, $aGrid[$i]); // drawing filled rectangle
        }
        imagecopy($rImage, $rSrcImage, $iFrameSize, $iFrameSize, 0, 0, $iSrcWidth, $iSrcHeight); // copy image to main resource image
        if (is_array($aWmImgInfo) && count($aWmImgInfo)) {
            imagecopy($rImage, $rWmImage, $iSrcWidth-$aWmImgInfo[0], $iFrameSize, 0, 0, $aWmImgInfo[0], $aWmImgInfo[1]); // copy watermark image to main resource image
        }
        $iTextColor = imagecolorallocate($rImage, 255, 255, 255); // defining color for text
        $sIP = $_SERVER['REMOTE_ADDR']; // define guest ip
        imagestring($rImage, 5, $iFrameSize*2, $iFrameSize*2, "Hello guest from {$sIP}, {$sOrigImg} - ({$iSrcWidth} x {$iSrcHeight})", $iTextColor); // draw text
        imagepng($rImage); // output as png image
    } else {
        echo 'wrong image';
        exit;
    }
?>

<?php
    if (! extension_loaded('gd')) { // small check - are GD installed or not
        echo 'GD not installed, please install';
        exit;
    }
    $sOrigImg = "pic1.jpg";
    $sWmImg = "watermark.png";
    $aImgInfo = getimagesize($sOrigImg);
    $aWmImgInfo = getimagesize($sWmImg);
    if (is_array($aImgInfo) && count($aImgInfo)) {
        header ("Content-type: image/png");
        $iSrcWidth = $aImgInfo[0];
        $iSrcHeight = $aImgInfo[1];
        $iFrameSize = 15;
        $rImage = imagecreatetruecolor($iSrcWidth+$iFrameSize*2, $iSrcHeight+$iFrameSize*2); // creating new true color image
        $rSrcImage = imagecreatefromjpeg($sOrigImg); //  creating source image resource
        $rWmImage = imagecreatefrompng($sWmImg); //  creating watermark image resource
        $aGrid[1] = imagecolorallocate($rImage, 130, 130, 130); // define colors for rectangular frame
        $aGrid[2] = imagecolorallocate($rImage, 150, 150, 150);
        $aGrid[3] = imagecolorallocate($rImage, 170, 170, 170);
        $aGrid[4] = imagecolorallocate($rImage, 190, 190, 190);
        $aGrid[5] = imagecolorallocate($rImage, 210, 210, 210);
        for ($i=1; $i<=5; $i++) { // our little frame will contain 5 rectangulars to emulate gradient
            imagefilledrectangle($rImage, $i*3, $i*3, ($iSrcWidth+$iFrameSize*2)-$i*3, ($iSrcHeight+$iFrameSize*2)-$i*3, $aGrid[$i]); // drawing filled rectangle
        }
        imagecopy($rImage, $rSrcImage, $iFrameSize, $iFrameSize, 0, 0, $iSrcWidth, $iSrcHeight); // copy image to main resource image
        if (is_array($aWmImgInfo) && count($aWmImgInfo)) {
            imagecopy($rImage, $rWmImage, $iSrcWidth-$aWmImgInfo[0], $iFrameSize, 0, 0, $aWmImgInfo[0], $aWmImgInfo[1]); // copy watermark image to main resource image
        }
        $iTextColor = imagecolorallocate($rImage, 255, 255, 255); // defining color for text
        $sIP = $_SERVER['REMOTE_ADDR']; // define guest ip
        imagestring($rImage, 5, $iFrameSize*2, $iFrameSize*2, "Hello guest from {$sIP}, {$sOrigImg} - ({$iSrcWidth} x {$iSrcHeight})", $iTextColor); // draw text
        imagepng($rImage); // output as png image
    } else {
        echo 'wrong image';
        exit;
    }
?>

I added my comments quite anywhere, so I hope that you don`t will have any difficulties with my code. Shortly – firstly we checking source image info, if not empty – continue, then preparing new resource image with GD, after reading source image, after drawing our source image to prepared resource object. Then we applying watermark image (if its present), then determination visitor`s IP, and drawing some text on our resource object. In result – we drawing our resource object into browser as PNG image. Thats all.

我在任何地方都添加了我的注释,所以希望您在使用我的代码时不会遇到任何困难。 很快-首先我们检查源图像信息(如果不为空)-继续,然后在读取源图像,将源图像绘制到准备好的资源对象之后,使用GD准备新的资源图像。 然后,我们应用水印图像(如果存在),然后确定访问者的IP,并在我们的资源对象上绘制一些文本。 结果–我们将资源对象作为PNG图像绘制到浏览器中。 就这样。

现场演示

结论 (Conclusion)

I hope that today’s article was very interesting for you again. Welcome back our friends for new tutorials. Good luck in your work!

我希望今天的文章对您再次很有趣。 欢迎回到我们的朋友那里获取新教程。 祝您工作顺利!

翻译自: https://www.script-tutorials.com/watermark-processing-on-images-using-php-and-gd/

图像处理库 gd

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值