Yootheme动物园图像水印

时间:2015-03-10 09:00:42

标签: image joomla joomla3.0 watermark php-gd

我使用了yootheme 动物园应用程序。我需要在动物园图像上添加水印。

This是动物园图片进度文件:

<?php
/**
* @package   com_zoo
* @author    YOOtheme http://www.yootheme.com
* @copyright Copyright (C) YOOtheme GmbH
* @license   http://www.gnu.org/licenses/gpl.html GNU/GPL
*/

/**
 * Image thumbnail helper class.
 *
 * @package Component.Helpers
 * @since 2.0
 */
class ImageThumbnailHelper extends AppHelper {

    /**
     * Creates an AppImageThumbnail instance
     *
     * @param string $file The filepath
     *
     * @return AppImageThumbnail
     *
     * @since 2.0
     */
    public function create($file) {
        return $this->app->object->create('AppImageThumbnail', array($file));
    }

    /**
     * Checks for the required php functions
     *
     * @return boolean
     *
     * @since 2.0
     */
    public function check() {
        $gd_functions = array(
            'getimagesize',
            'imagecreatefromgif',
            'imagecreatefromjpeg',
            'imagecreatefrompng',
            'imagecreatetruecolor',
            'imagecopyresized',
            'imagecopy',
            'imagegif',
            'imagejpeg',
            'imagepng'
            );

        foreach ($gd_functions as $name) {
            if (!function_exists($name)) return false;
        }

        return true;
    }

}

/**
 * Image thumbnail class.
 *
 * @package Component.Helpers
 * @since 2.0
 */
class AppImageThumbnail {

    /**
     * App instance
     *
     * @var App
     * @since 2.0
     */
    public $app;

    /**
     * The image file path
     * @var string
     */
    public $img_file;

    /**
     * The image format
     * @var string
     */
    public $img_format;

    /**
     * The image source
     * @var resource
     */
    public $img_source;

    /**
     * The image width
     * @var string
     */
    public $img_width;

    /**
     * The image height
     * @var string
     */
    public $img_height;

    /**
     * The thumb width
     * @var string
     */
    public $thumb_width;

    /**
     * The thumb height
     * @var string
     */
    public $thumb_height;

    /**
     * The thumb resize
     * @var boolean
     */
    public $thumb_resize;

    /**
     * The thumb quality
     * @var int
     */
    public $thumb_quality;

    /**
     * Class constructor
     *
     * @param string $file The file path.
     * @since 2.0
     */
    public function __construct($file) {

        $this->img_file      = $file;
        $this->thumb_resize  = true;
        $this->thumb_quality = 90;

        // get image info
        list($width, $height, $type, $attr) = @getimagesize($this->img_file, $info);

        // set image dimensions and type
        if (is_array($info)) {

            $this->img_width    = $width;
            $this->img_height   = $height;
            $this->thumb_width  = $width;
            $this->thumb_height = $height;

            switch ($type) {
                case 1:
                    $this->img_format = 'gif';
                    $this->img_source = imagecreatefromgif($this->img_file);
                    break;
                case 2:
                    $this->img_format = 'jpeg';
                    $this->img_source = imagecreatefromjpeg($this->img_file);
                    break;
                case 3:
                    $this->img_format = 'png';
                    $this->img_source = imagecreatefrompng($this->img_file);
                    break;
                default:
                    $this->img_format = null;
                    $this->img_source = null;
                    break;
            }
        }
    }

    /**
     * Set resize
     *
     * @param boolean $resize Resize value
     *
     * @return void
     * @since 2.0
     */
    public function setResize($resize) {
        $this->thumb_resize = $resize;
    }

    /**
     * Set thumb dimensions
     *
     * @param int $width
     * @param int $height
     *
     * @return void
     * @since 2.0
     */
    public function setSize($width, $height) {
        $this->thumb_width  = $width;
        $this->thumb_height = $height;
    }

    /**
     * Size thumb width
     *
     * @param int $width
     *
     * @return void
     * @since 2.0
     */
    public function sizeWidth($width) {
        $this->thumb_width  = $width;
        $this->thumb_height = @($width / $this->img_width) * $this->img_height;
    }

    /**
     * Size thumb height
     *
     * @param int $height
     *
     * @return void
     * @since 2.0
     */
    public function sizeHeight($height) {
        $this->thumb_width  = @($height / $this->img_height) * $this->img_width;
        $this->thumb_height = $height;
    }

    /**
     * Save file
     *
     * @param string $file the file to save
     *
     * @return boolean true on success
     * @since 2.0
     */
    public function save($file) {
        $return = false;

        if ($this->img_format) {

            $src   = $this->img_source;
            $src_x = 0;
            $src_y = 0;

            // smart resize thumbnail image
            if ($this->thumb_resize) {
                $resized_width  = @($this->thumb_height / $this->img_height) * $this->img_width;
                $resized_height = @($this->thumb_width / $this->img_width) * $this->img_height;

                if ($this->thumb_width <= $resized_width) {
                    $width  = $resized_width;
                    $height = $this->thumb_height;
                    $src_x  = intval(($resized_width - $this->thumb_width) / 2);
                } else {
                    $width  = $this->thumb_width;
                    $height = $resized_height;
                    $src_y  = intval(($resized_height - $this->thumb_height) / 2);
                }

                $src = imagecreatetruecolor($width, $height);

                // save transparent colors
                if ($this->img_format == 'png') {
                    imagecolortransparent($src, imagecolorallocate($src, 0, 0, 0));
                    imagealphablending($src, false);
                    imagesavealpha($src, true);
                }

                // get and reallocate transparency-color for gif
                if ($this->img_format == 'gif') {
                    imagealphablending($src, false);
                    $transindex = imagecolortransparent($this->img_source) <= imagecolorstotal($src) ? imagecolortransparent($this->img_source) : imagecolorstotal($src);
                    if ($transindex >= 0) {
                        $transcol = imagecolorsforindex($this->img_source, $transindex);
                        $transindex = imagecolorallocatealpha($src, $transcol['red'], $transcol['green'], $transcol['blue'], 127);
                        imagefill($src, 0, 0, $transindex);
                    }
                }

                if (function_exists('imagecopyresampled')) {
                    @imagecopyresampled($src, $this->img_source, 0, 0, 0, 0, $width, $height, $this->img_width, $this->img_height);
                } else {
                    @imagecopyresized($src, $this->img_source, 0, 0, 0, 0, $width, $height, $this->img_width, $this->img_height);
                }

                // restore transparency for gif
                if ($this->img_format == 'gif') {
                    if ($transindex >= 0) {
                        imagecolortransparent($src, $transindex);
                        for ($y=0; $y < imagesy($src); ++$y) {
                            for ($x=0; $x < imagesx($src); ++$x) {
                                if (((imagecolorat($src, $x, $y)>>24) & 0x7F) >= 100) {
                                    imagesetpixel($src, $x, $y, $transindex);
                                }
                            }
                        }
                    }
                }
            }

            // create thumbnail image
            $thumbnail = imagecreatetruecolor($this->thumb_width, $this->thumb_height);

            // save transparent colors for png
            if ($this->img_format == 'png') {
                imagecolortransparent($thumbnail, imagecolorallocate($src, 0, 0, 0));
                imagealphablending($thumbnail, false);
                imagesavealpha($thumbnail, true);
            }

            // get and reallocate transparency-color for gif
            if ($this->img_format == 'gif') {
                imagealphablending($thumbnail, false);
                $transindex = imagecolortransparent($src);
                if ($transindex >= 0) {
                    $transcol = imagecolorsforindex($src, $transindex);
                    $transindex = imagecolorallocatealpha($thumbnail, $transcol['red'], $transcol['green'], $transcol['blue'], 127);
                    imagefill($thumbnail, 0, 0, $transindex);
                }
            }

            @imagecopy($thumbnail, $src, 0, 0, $src_x, $src_y, $this->thumb_width, $this->thumb_height);

            // restore transparency for gif
            if ($this->img_format == 'gif') {
                if ($transindex >= 0) {
                    imagecolortransparent($thumbnail, $transindex);
                    for ($y=0; $y < imagesy($thumbnail); ++$y) {
                        for ($x=0; $x < imagesx($thumbnail); ++$x) {
                            if (((imagecolorat($thumbnail, $x, $y)>>24) & 0x7F) >= 100) {
                                imagesetpixel($thumbnail, $x, $y, $transindex);
                            }
                        }
                    }
                }
            }

            // save thumbnail to file
            ob_start();
            switch ($this->img_format) {
                case 'gif':
                    $return = imagegif($thumbnail);
                    break;
                case 'jpeg':
                    $return = imagejpeg($thumbnail, null, $this->thumb_quality);
                    break;
                case 'png':
                    $return = imagepng($thumbnail);
                    break;
            }
            $output = ob_get_contents();
            ob_end_clean();
            JFile::write($file, $output);

            // free memory resources
            imagedestroy($thumbnail);
            imagedestroy($src);
        }

        return $return;
    }

}

我找到了这段代码:

@imagecopy($thumbnail, $src, 0, 0, $src_x, $src_y, $this->thumb_width, $this->thumb_height);

现在如何在此文件中添加水印?

1 个答案:

答案 0 :(得分:0)

您可以使用像Supermarks Pro这样的第三方Joomla插件。适用于除灯箱内发射的所有图像。