WordPress.org

Ready to get started?Download WordPress

Forums

Simple Image watermark
conflicts with other plugins (fixes provided) (2 posts)

  1. maximinime
    Member
    Posted 1 year ago #

    When files have been uploaded to a different location (via the upload_dir filter hook), SIW assumes they will be in the default location then fails when they aren't.

    It also conflicts with wp e-Commerce, regenerating the watermarked image on every page load, continually degrading the image as it's a copy of a copy of a copy, ad infinitum. This is not SIW's fault, but it's a very common plugin so I made SIW work around e-Commerce's flaw.

    function siw_add_watermark($meta){
        $referer = strpos( wp_get_referer(), 'siw_options_page' );
        if ( $referer != '' ) {
            return $meta;
        }
        //var_dump($meta);
        $options = get_option('siw_plugin_options');
        if(!isset($options['sizes']) || !isset($options['image']) || $options['image'] == '') return $meta;
    
        foreach($options['sizes'] as $size){ // Cycle trough checked image sizes to crop
            if(isset($meta['sizes'][$size]) || $size == 'full size'){ // Check if given size exist
    
                $pos = strpos($options['image'], 'wp-content/');
                $watermark_path = ABSPATH.substr($options['image'], $pos);
    
                $test = getimagesize($watermark_path);
                //var_dump($test);
    
                if($test['mime'] == 'image/png'){
                    $stamp = imagecreatefrompng($watermark_path);
                }elseif($test['mime'] == 'image/jpeg'){
                    $stamp = imagecreatefromjpeg($watermark_path);
                }
    
                // Url of processed file
                $file = wp_upload_dir();
                $file = trailingslashit($file['basedir']);
    
                if ($size == 'full size')
                    $file .= $meta['file'];
                else
                    $file .= substr($meta['file'], 0, strrpos($meta['file'], '/') + 1) . $meta['sizes'][$size]['file'];
                $watermarked = $file . '.siw';//use filesystem to store watermarked status because wp e-Commerce doesn't completely save metadata
    
                if (file_exists($watermarked) && filemtime($watermarked) >= filemtime($file))
                    continue;
    
                $file_params = getimagesize($file);
    
                if($file_params['mime'] == 'image/png'){
                    $im = imagecreatefrompng($file);
                }elseif($file_params['mime'] == 'image/jpeg'){
                    $im = imagecreatefromjpeg($file);
                }
                else
                    continue;
    
                // Set the margins for the stamp and get the height/width of the stamp image
                $marginlr = (int)$options['margin_leftright'];
                $margintd = (int)$options['margin_topdown'];
                $stampw = imagesx($stamp);
                $stamph = imagesy($stamp);
                $mainw = imagesx($im);
                $mainh = imagesy($im);
    
                switch($options['watermark_position']){
                    case '1':
                        $posx = $marginlr;
                        $posy = $margintd;
                    break;
                    case '2':
                        $posx = ($mainw - $stampw) / 2;
                        $posy = $margintd;
                    break;
                    case '3':
                        $posx = $mainw - $stampw - $marginlr;
                        $posy = $margintd;
                    break;
                    case '4':
                        $posx = $marginlr;
                        $posy = ($mainh - $stamph) / 2;
                    break;
                    case '5':
                        $posx = ($mainw - $stampw) / 2;
                        $posy = ($mainh - $stamph) / 2;
                    break;
                    case '6':
                        $posx = $mainw - $stampw - $marginlr;
                        $posy = ($mainh - $stamph) / 2;
                    break;
                    case '7':
                        $posx = $marginlr;
                        $posy = $mainh - $stamph - $margintd;
                    break;
                    case '8':
                        $posx = ($mainw - $stampw) / 2;
                        $posy = $mainh - $stamph - $margintd;
                    break;
                    case '9':
                        $posx = $mainw - $stampw - $marginlr;
                        $posy = $mainh - $stamph - $margintd;
                    break;
    
                    default:
    
                }
    
                // Copy the stamp image onto our photo using the margin offsets and the photo
                // width to calculate positioning of the stamp.
                imagecopy($im, $stamp, $posx, $posy, 0, 0, imagesx($stamp), imagesy($stamp));
    
                imagejpeg($im, $file, 90);
                imagedestroy($im);
                touch($watermarked);
            }
    
        }
    
        return $meta;
    }

    http://wordpress.org/extend/plugins/simple-image-watermark/

  2. Amir
    Member
    Plugin Author

    Posted 1 year ago #

    Thank you for feedback. I will check that in next plugin update.

Topic Closed

This topic has been closed to new replies.

About this Plugin

About this Topic