WordPress.org

Plugin Directory

Changeset 490608


Ignore:
Timestamp:
01/16/12 14:40:42 (2 years ago)
Author:
joehoyle
Message:

Version 0.6

Location:
wp-thumb/trunk
Files:
5 added
6 edited

Legend:

Unmodified
Added
Removed
  • wp-thumb/trunk/phpthumb/src/thumb_plugins/backgroundFill.php

    r461780 r490608  
    2525        $this->newImage = imagecreatetruecolor($width, $height); 
    2626         
     27        // This is needed to support alpha 
     28        imagesavealpha($this->newImage, true); 
     29        imagealphablending( $this->newImage, false ); 
     30         
    2731        //check if we are padding vertical / horizontally 
    2832        if( $this->currentDimensions['width'] != $width ) { 
     
    4145            $right_color = key( $right_color );  
    4246 
    43             $colorToPaint = imagecolorallocatealpha($this->newImage,substr($left_color, 0, 3),substr($left_color, 3, 3),substr($left_color, 6, 3),0); 
    44              
     47            $colorToPaint = imagecolorallocatealpha($this->newImage,substr($left_color, 0, 3),substr($left_color, 3, 3),substr($left_color, 6, 3),substr($left_color, 9, 3)); 
     48 
    4549            // Fill left color 
    4650            imagefilledrectangle($this->newImage,0,0,$offsetLeft+5,$height,$colorToPaint); 
    47              
    48              
    49             $colorToPaint = imagecolorallocatealpha($this->newImage,substr($right_color, 0, 3),substr($right_color, 3, 3),substr($right_color, 6, 3),0); 
     51                         
     52            $colorToPaint = imagecolorallocatealpha($this->newImage,substr($right_color, 0, 3),substr($right_color, 3, 3),substr($right_color, 6, 3),substr($left_color, 9, 3)); 
    5053            // Fill right color 
    5154            imagefilledrectangle($this->newImage,$offsetLeft+$this->currentDimensions['width']-5,0,$width,$height,$colorToPaint); 
    52              
     55             
    5356        } elseif( $this->currentDimensions['height'] != $height ) { 
    5457         
     
    6669            $bottom_color = key( $bottom_color );    
    6770 
    68             $colorToPaint = imagecolorallocatealpha($this->newImage,substr($top_color, 0, 3),substr($top_color, 3, 3),substr($top_color, 6, 3),0); 
     71            $colorToPaint = imagecolorallocatealpha($this->newImage,substr($top_color, 0, 3),substr($top_color, 3, 3),substr($top_color, 6, 3),substr($left_color, 9, 3)); 
    6972             
    7073            // Fill left color 
     
    7275             
    7376             
    74             $colorToPaint = imagecolorallocatealpha($this->newImage,substr($bottom_color, 0, 3),substr($bottom_color, 3, 3),substr($bottom_color, 6, 3),0); 
     77            $colorToPaint = imagecolorallocatealpha($this->newImage,substr($bottom_color, 0, 3),substr($bottom_color, 3, 3),substr($bottom_color, 6, 3),substr($left_color, 9, 3)); 
    7578            // Fill right color 
    7679            imagefilledrectangle($this->newImage,0,$offsetTop-5+$this->currentDimensions['height'],$width,$height,$colorToPaint); 
    7780 
    7881        } 
    79  
     82         
    8083        imagecopy($this->newImage, $this->workingImage, $offsetLeft, $offsetTop, 0, 0, $this->currentDimensions['width'], $this->currentDimensions['height']); 
    8184         
     
    152155             
    153156            while( $y_1 < $y_2 ) { 
    154                 $colors[] = $this->roundRGB( $this->colorAtToRGB( imagecolorat( $resource, $x_1, $y_1 ) ) ); 
     157                $colors[] = $this->colorAtToRGBA( imagecolorat( $resource, $x_1, $y_1 ), $resource ); 
    155158                $y_1++; 
    156159            } 
     
    161164        elseif( $y_1 == $y_2 ) { 
    162165            while( $x_1 < $x_2 ) { 
    163                 $colors[] = $this->roundRGB( $this->colorAtToRGB( imagecolorat( $resource, $x_1, $y_1 ) ) ); 
     166                $colors[] = $this->colorAtToRGBA( imagecolorat( $resource, $x_1, $y_1 ), $resource ); 
    164167                $x_1++; 
    165168            } 
     
    170173    } 
    171174     
    172     function colorAtToRGB( $rgb ) { 
    173         $r = ($rgb >> 16) & 0xFF; 
    174         $g = ($rgb >> 8) & 0xFF; 
    175         $b = $rgb & 0xFF; 
     175    function colorAtToRGBA( $rgba, $resource ) { 
     176 
     177        $colors = imagecolorsforindex($resource, $rgba); 
     178 
     179        $colors['red']      = str_pad( (string) $colors['red'], 3, '0', STR_PAD_LEFT ); 
     180        $colors['green']    = str_pad( (string) $colors['green'], 3, '0', STR_PAD_LEFT ); 
     181        $colors['blue']     = str_pad( (string) $colors['blue'], 3, '0', STR_PAD_LEFT ); 
     182        $colors['alpha']    = str_pad( (string) $colors['alpha'], 3, '0', STR_PAD_LEFT ); 
    176183         
    177         return "{$r}{$g}{$b}"; 
    178     } 
    179      
    180     function roundRGB( $rgb ) { 
    181          
    182         $r = substr( $rgb, 0, 3 ); 
    183         $g = substr( $rgb, 3, 3 );       
    184         $b = substr( $rgb, 6, 3 ); 
    185  
    186         return "{$r}{$g}{$b}"; 
     184        return "{$colors['red']}{$colors['green']}{$colors['blue']}{$colors['alpha']}"; 
    187185    } 
    188186} 
  • wp-thumb/trunk/readme.txt

    r464801 r490608  
    44Requires at least: 3.0 
    55Tested up to: 3.2.1 
    6 Stable tag: trunk 
     6Stable tag: 0.6 
    77 
    88Gallery and Portfolio management for your WordPress site.  
  • wp-thumb/trunk/tests/testBackgroundFill.php

    r461780 r490608  
    4242        list( $new_width, $new_height ) = getimagesize( $file ); 
    4343         
    44         $this->assertEquals( $new_width, 100, 'Width is not expected' ); 
    45         $this->assertEquals( $new_height, 100, 'Height is not expcted' ); 
     44        $this->assertEquals( $new_width, 100, 'Width of text image is not expected' ); 
     45        $this->assertEquals( $new_height, 100, 'Height of text image is not expcted' ); 
    4646         
    4747        // How bacbkground fill the cropped imageg (which is mixed colours) 
     
    6060     
    6161    } 
     62     
     63    function testBackgroundFillOnTransparentImage() { 
     64     
     65        $path = dirname( __FILE__ ) . '/images/transparent.png'; 
     66         
     67        // check the iamge is transparent 
     68        $this->assertImageAlphaAtPoint( $path, array( 0, 0 ), 127 ); 
     69         
     70        $image = new WP_Thumb( $path, 'width=400&height=100&crop=1&background_fill=solid&cache=0&return=path' ); 
     71         
     72        $file = $image->returnImage(); 
     73 
     74        $this->assertImageAlphaAtPoint( $file, array( 0, 0 ), 127 ); 
     75     
     76    } 
    6277 
    6378} 
  • wp-thumb/trunk/tests/testFileNames.php

    r464762 r490608  
    109109         
    110110        if ( is_multisite() ) 
    111             return; 
     111            $this->markTestSkipped( 'Only runs on a MultiSite setup' ); 
    112112     
    113113        // For this test we need to change the upload URL to something other than uplaod path 
    114         add_filter( 'upload_dir', function( $args ) { 
     114        add_filter( 'upload_dir', $f = function( $args ) { 
    115115            $args['url'] = str_replace( 'wp-content/uploads', 'files', $args['url'] ); 
    116116            $args['baseurl'] = str_replace( 'wp-content/uploads', 'files', $args['baseurl'] ); 
     
    121121        $upload_dir = wp_upload_dir(); 
    122122         
    123         unlink( $upload_dir['basedir'] . '/google.png' ); 
     123        if ( file_exists( $upload_dir['basedir'] . '/google.png' ) ) 
     124            unlink( $upload_dir['basedir'] . '/google.png' ); 
     125     
    124126        copy( dirname( __FILE__ ) . '/images/google.png', $upload_dir['basedir'] . '/google.png' ); 
    125127         
     
    131133         
    132134        $this->assertEmpty( $image->error ); 
    133      
     135         
     136        remove_filter( 'upload_dir', $f ); 
    134137    } 
    135138     
     
    146149         
    147150    } 
     151     
     152    function testLocalFileCacheFilePath() { 
     153     
     154        $image = new WP_Thumb; 
     155        $image->setFilePath( ABSPATH . 'foo.jpg' ); 
     156         
     157        $this->assertFalse( strpos( $image->getCacheFilePath(), '//' ) ); 
     158     
     159    } 
     160     
     161    function testMultipleRemotePathCacheFileNames() { 
     162     
     163        $files = array(  
     164             
     165            'https://fbcdn-profile-a.akamaihd.net/hprofile-ak-snc4/276941_243774452360675_675769393_n.jpg', 
     166            'https://fbcdn-profile-a.akamaihd.net/hprofile-ak-ash2/372773_166158836814274_569429670_n.jpg', 
     167            'https://fbcdn-profile-a.akamaihd.net/hprofile-ak-snc4/372977_301165979915058_1266923901_n.jpg', 
     168            'https://fbcdn-profile-a.akamaihd.net/hprofile-ak-snc4/373643_305978336102241_1099286630_n.jpg' 
     169             
     170        ); 
     171         
     172        $wp_thumb_files = array(); 
     173         
     174        foreach ( $files as $url ) { 
     175         
     176            $url = wpthumb( $url, 'width=100&crop=1&height=100' ); 
     177            $this->assertNotContains( $url, $wp_thumb_files ); 
     178        } 
     179     
     180    } 
    148181} 
  • wp-thumb/trunk/tests/testPostThumbnail.php

    r464762 r490608  
    44 
    55    function testPostThumbnailResize() { 
     6     
     7        require_once( ABSPATH . WPINC . '/post-thumbnail-template.php' ); 
    68         
    79        $post = reset( get_posts( 'showposts=1' ) ); 
  • wp-thumb/trunk/wpthumb.php

    r467498 r490608  
    11<?php 
     2 
    23/* 
    34Plugin Name: WP Thumb 
     
    56Description: phpThumb for WordPress 
    67Author: Human Made Limited 
    7 Version: 0.5 
     8Version: 0.6 
    89Author URI: http://www.hmn.md/ 
    910*/ 
     
    2627*/ 
    2728 
     29define( 'WP_THUMB_PATH', dirname( __FILE__ ) . '/' ); 
     30define( 'WP_THUMB_URL', str_replace( ABSPATH, site_url( '/' ), WP_THUMB_PATH ) ); 
     31 
     32// TODO wpthumb_create_args_from_size filter can pass string or array which makes it difficult to hook into 
     33 
     34// Watermkaing stuff 
     35include_once( WP_THUMB_PATH . '/wpthumb.watermark.php' ); 
     36 
    2837class WP_Thumb { 
    29      
     38 
    3039    private $args; 
    3140    private $file_path; 
    32      
     41 
    3342    function __construct( $file_path = null, $args = array() ) { 
    34          
     43 
    3544        if ( !class_exists( 'PhpThumbFactory' ) ) 
    3645            include_once( dirname( __FILE__ ) . '/phpthumb/src/ThumbLib.inc.php' ); 
    37          
     46 
    3847        if( $file_path ) 
    3948            $this->setFilePath( $file_path ); 
    40          
     49 
     50        if ( $args ) 
    4151        $this->setArgs( $args ); 
    42          
    43         if( $file_path && ! file_exists( $this->getCacheFilePath() ) ) 
     52 
     53        if( $file_path && $args && ( ! file_exists( $this->getCacheFilePath() ) || ! $this->args['cache'] ) ) 
    4454            $this->generateCacheFile(); 
    45              
    46     } 
    47      
     55 
     56    } 
     57 
    4858    public function setFilePath( $file_path ) { 
    49          
     59 
    5060        $upload_dir = wp_upload_dir(); 
    5161 
     
    5464            return; 
    5565        } 
    56          
     66 
    5767        if( strpos( $file_path, $upload_dir['baseurl'] ) !== false ) 
    5868            $this->file_path = str_replace( $upload_dir['baseurl'], $upload_dir['basedir'], $file_path ); 
    59          
     69 
    6070        else 
    6171            $this->file_path = str_replace( get_bloginfo( 'url' ) . '/', ABSPATH, $file_path ); 
    6272 
    6373    } 
    64      
     74 
    6575    public function setArgs( $args ) { 
    66      
     76 
    6777         $arg_defaults = array( 
    6878            'width'                 => 0, 
     
    8191            'background_fill'       => null 
    8292        ); 
    83          
     93 
    8494        $args = wp_parse_args( $args, $arg_defaults ); 
    8595        $new_args = array(); 
    86          
     96 
    8797        if ( $args['width'] === 'thumbnail' ) 
    8898            $new_args = array( 'width' => get_option('thumbnail_size_w'), 'height' => get_option('thumbnail_size_h'), 'crop' => get_option('thumbnail_crop') ); 
    89          
     99 
    90100        elseif ( $args['width'] === 'medium' ) 
    91101            $new_args = array( 'width' => get_option('medium_size_w'), 'height' => get_option('medium_size_h') ); 
    92          
     102 
    93103        elseif ( $args['width'] === 'large' ) 
    94104            $new_args = array( 'width' => get_option('large_size_w'), 'height' => get_option('large_size_h') ); 
    95          
     105 
    96106        elseif ( is_string( $args['width'] ) && $args['width'] ) 
    97107            $new_args = apply_filters( 'wpthumb_create_args_from_size', $args ); 
    98          
     108 
    99109        elseif ( is_array( $args['width'] ) ) 
    100110            $new_args = $args; 
    101          
     111 
    102112        $args = wp_parse_args( $new_args, $args ); 
    103          
     113 
    104114        // Cast some args 
    105115        $args['crop']   = (bool) $args['crop']; 
     
    108118        $args['width']  = (int) $args['width']; 
    109119        $args['height'] = (int) $args['height']; 
    110                  
     120 
    111121        // Format the crop from position arg 
    112122        if ( is_string( $args['crop_from_position'] ) ) 
    113123            $args['crop_from_position'] = explode( ',', $args['crop_from_position'] ); 
    114          
     124 
    115125        // Sort out the watermark args 
    116126        if ( ! empty( $args['watermark_options']['mask'] ) ) { 
     
    118128            $args['watermark_options'] = wp_parse_args( $args['watermark_options'], $wpthumb_wm_defaults ); 
    119129        } 
    120          
     130 
    121131        $this->args = $args; 
    122      
    123     } 
    124      
     132 
     133    } 
     134 
    125135    public function getFilePath() { 
    126          
     136 
    127137        if( strpos( $this->file_path, '/' ) === 0 && ! file_exists( $this->file_path ) && $this->args['default'] ) 
    128138            $this->file_path = $this->args['default']; 
    129          
     139 
    130140        return $this->file_path; 
    131141    } 
    132      
     142 
    133143    public function getArgs() { 
    134         return $this->args; 
    135     } 
    136      
     144        return (array) $this->args; 
     145    } 
     146 
    137147    public function getFileExtension() { 
    138      
     148 
    139149        $path = $this->getFilePath(); 
    140          
     150 
    141151        $ext = strtolower( end( explode( '.', $path ) ) ); 
    142          
     152 
    143153        // Remove a query string if there is one 
    144154        $ext = reset( explode( '?', $ext ) ); 
    145          
     155 
    146156        if ( strlen( $ext ) > 4 ) { 
    147157            // Seems like we dont have an ext, lets guess at JPG 
     
    149159            $ext = 'jpg'; 
    150160        } 
    151      
     161 
    152162        return $ext; 
     163 
     164    } 
     165 
     166    public function getCacheFilePath() { 
     167 
     168        $path = $this->getFilePath(); 
    153169         
    154     } 
    155      
    156     public function getCacheFilePath() { 
     170        if ( !$path ) 
     171            return ''; 
    157172 
    158173        return $this->getCacheFileDirectory() . '/' . $this->getCacheFileName(); 
    159      
    160     } 
    161      
     174 
     175    } 
     176 
    162177    public function getCacheFileDirectory() { 
    163      
     178 
     179        $path = $this->getFilePath(); 
     180        if ( !$path ) 
     181            return ''; 
     182 
    164183        $original_filename = end( explode( '/', $this->getFilePath() ) ); 
    165184 
     
    167186        if ( strpos( $original_filename, '0_0_resize' ) === 0 ) 
    168187            $original_filename = end( explode( '/', str_replace( '/' . $original_filename, '', $this->getFilePath() ) ) ); 
    169          
     188 
    170189        $parts = explode( '.', $original_filename ); 
    171          
     190 
    172191        array_pop( $parts ); 
    173          
     192 
    174193        $filename_nice = implode( '_', $parts ); 
    175          
     194 
    176195        $upload_dir = wp_upload_dir(); 
    177          
     196 
    178197        if ( strpos( $this->getFilePath(), $upload_dir['basedir'] ) === 0 ) : 
    179198            $new_dir = $upload_dir['basedir'] . '/cache' . $upload_dir['subdir'] . '/' . $filename_nice; 
     199 
     200        elseif ( strpos( $this->getFilePath(), ABSPATH ) === 0 ) : 
     201             
     202            $new_dir = $upload_dir['basedir'] . '/cache/local'; 
    180203         
    181204        else : 
    182205            $parts = parse_url( $this->getFilePath() ); 
    183              
     206 
    184207            if ( !empty( $parts['host'] ) ) 
    185208                $new_dir = $upload_dir['basedir'] . '/cache/remote/' . sanitize_title( $parts['host'] ); 
    186                  
     209 
    187210            else 
    188                 $new_dir = $upload_dir['basedir'] . '/cache/remote/'; 
    189          
     211                $new_dir = $upload_dir['basedir'] . '/cache/remote'; 
     212 
    190213        endif; 
    191          
     214 
    192215        $new_dir = str_replace( '/cache/cache', '/cache', $new_dir ); 
    193          
     216 
    194217        return $new_dir; 
     218 
     219    } 
     220 
     221    public function getCacheFileName() { 
     222 
     223        $path = $this->getFilePath(); 
    195224     
    196     } 
    197      
    198     public function getCacheFileName() { 
    199  
    200         $serialize = crc32( serialize( array_merge( $this->args, array( $this->getFilePath() ) ) ) ); 
     225        if ( !$path ) 
     226            return ''; 
     227 
     228        $serialize = crc32( serialize( array_merge( $this->getArgs(), array( $this->getFilePath() ) ) ) ); 
    201229         
    202230        // Gifs are converted to pngs 
    203231        if ( $this->getFileExtension() == 'gif' ) 
    204232            return $serialize . '.png'; 
    205          
     233 
    206234        return $serialize . '.' . $this->getFileExtension(); 
    207      
    208     } 
    209      
     235 
     236    } 
     237 
    210238    public function generateCacheFile() { 
    211          
     239 
    212240        $new_filepath = $this->getCacheFilePath(); 
    213241        $file_path = $this->getFilePath(); 
    214          
     242 
    215243        // Up the php memory limit 
    216         @ini_set( 'memory_limit', '256M' ); 
     244        @ini_set( 'memory_limit', apply_filters( 'admin_memory_limit', '256M' ) ); 
    217245 
    218246        // Create the image 
     
    225253 
    226254        } 
    227          
     255 
    228256        $thumb = apply_filters( 'wpthumb_image_filter', $thumb, $this->args ); 
    229          
     257 
    230258        extract( $this->args ); 
    231          
     259 
    232260        // Convert gif images to png before resizing 
    233261        if ( $this->getFileExtension() == 'gif' ) : 
    234262 
    235263            // Don't resize animated gifs and the animations will be broken 
    236             if ( $args['resize_animations'] !== true && $this->isAnimatedGif() ) { 
     264            if ( !empty( $resize_animations ) !== true && $this->isAnimatedGif() ) { 
    237265                $this->error = new WP_Error( 'animated-gif' ); 
    238266                return $this->returnImage(); 
    239267            } 
    240  
     268             
     269            wp_mkdir_p( $this->getCacheFileDirectory() ); 
     270             
    241271            // Save the converted image 
    242             $thumb->save( $new_filepath . '.png', 'png' ); 
     272            $thumb->save( $new_filepath, 'png' ); 
    243273 
    244274            unset( $thumb ); 
     
    248278 
    249279        endif; 
    250          
     280 
    251281        // Watermarking (pre resizing) 
    252282        if ( isset( $watermark_options['mask'] ) && $watermark_options['mask'] && isset( $watermark_options['pre_resize'] ) && $watermark_options['pre_resize'] === true ) { 
     
    254284            $thumb->createWatermark( $watermark_options['mask'], $watermark_options['position'], $watermark_options['padding'] ); 
    255285        } 
    256          
     286 
    257287        // Cropping 
    258288        if ( $crop === true && $resize === true ) : 
    259            
     289 
    260290            if ( $crop_from_position && count( $crop_from_position ) == 2 && method_exists( $thumb, 'adaptiveResizeFromPoint' ) && empty( $background_fill ) ) { 
    261291                $thumb->adaptiveResizeFromPoint( $width, $height, $crop_from_position[0], $crop_from_position[1] ); 
    262              
     292 
    263293            } 
    264              
     294 
    265295            elseif( $background_fill == 'solid' && $thumb->canBackgroundFillSolidColorWithResize( $width, $height ) ) { 
    266296                $thumb->resize( $width, $height ); 
    267297                $thumb->backgroundFillColorAuto( $width, $height ); 
    268298            } 
    269              
     299 
    270300            else { 
    271301                $thumb->adaptiveResize( $width, $height ); 
     
    276306 
    277307        else : 
    278          
     308 
    279309            $thumb->resize( $width, $height ); 
    280310 
    281311        endif; 
    282          
     312 
    283313        // Watermarking (post resizing) 
    284314        if ( isset( $watermark_options['mask'] ) && $watermark_options['mask'] && isset( $watermark_options['pre_resize'] ) && $watermark_options['pre_resize'] === false ) 
     
    286316         
    287317        wp_mkdir_p( $this->getCacheFileDirectory() ); 
    288          
     318 
    289319        $thumb->save( $new_filepath ); 
    290320 
    291321        // Destroy the image 
    292322        unset( $thumb ); 
    293      
    294     } 
    295      
     323 
     324    } 
     325 
    296326    public function errored() { 
    297327 
    298328        return ! empty( $this->error ); 
    299          
    300     } 
    301      
     329 
     330    } 
     331 
    302332    public function returnImage() { 
    303          
     333 
    304334        if ( ! empty( $this->error ) ) 
    305335            $path = $this->getFilePath(); 
    306336        else 
    307337            $path = $this->getCacheFilePath(); 
    308          
     338 
    309339        if ( $this->args['return'] == 'path' ) 
    310340            return $path; 
    311          
    312         return $this->getFileURLForFilePath( $path ); 
    313     } 
    314      
     341 
     342        return $path ? $this->getFileURLForFilePath( $path ) : $path; 
     343    } 
     344 
    315345    public function getCacheFileURL() { 
    316346        return $this->getFileURLForFilePath( $this->getCacheFilePath() ); 
    317347    } 
    318      
     348 
    319349    public function getFileURL() { 
    320350        return $this->getFileURLForFilePath( $this->getFilePath() ); 
    321351    } 
    322      
     352 
    323353    private function getFileURLForFilePath( $path ) { 
    324      
     354 
    325355        $upload_dir = wp_upload_dir(); 
    326          
     356 
    327357        if ( strpos( $path, $upload_dir['basedir'] ) !== false ) { 
    328358            return str_replace( $upload_dir['basedir'], $upload_dir['baseurl'], $path ); 
    329             
    330         } else {         
     359 
     360        } else { 
    331361            return str_replace( ABSPATH, get_bloginfo( 'url' ) . '/', $path ); 
    332362 
    333         }  
    334      
    335     } 
    336      
     363        } 
     364 
     365    } 
     366 
    337367    private function isAnimatedGif() { 
    338          
     368 
    339369        $filename = $this->getFilePath(); 
    340          
     370 
    341371        $filecontents = file_get_contents( $filename ); 
    342372 
     
    372402 
    373403        return false; 
    374      
     404 
    375405    } 
    376406 
     
    456486 
    457487    // Check if is using legacy args 
    458     if ( is_numeric( $args ) ) 
    459         $legacy_args = array_combine( array_slice( array( 'width', 'height', 'crop', 'resize' ), 0, count( array_slice( func_get_args(), 1 ) ) ), array_slice( func_get_args(), 1 ) ); 
    460  
     488    if ( is_numeric( $args ) ) { 
     489        $legacy_args = array_combine( array_slice( array( 'width', 'height', 'crop', 'resize' ), 0, count( array_slice( func_get_args(), 1 ) ) ), array_slice( func_get_args(), 1, 4 ) ); 
     490    } 
     491     
    461492    if ( isset( $legacy_args ) && $legacy_args ) 
    462493        $args = $legacy_args; 
    463      
     494 
    464495    $thumb = new WP_Thumb( $url, $args ); 
    465      
     496 
    466497    return $thumb->returnImage(); 
    467498} 
     
    542573 
    543574    $image = new WP_Thumb( $path, $args ); 
    544      
     575 
    545576    $args = $image->getArgs(); 
    546      
     577 
    547578    extract( $args ); 
    548579 
    549580    if ( file_exists( $path ) ) { 
    550      
     581 
    551582        $image_src = $image->returnImage(); 
    552      
     583 
    553584        $crop = (bool) ( empty( $crop ) ) ? false : $crop; 
    554585 
     
    562593 
    563594        endif; 
    564      
     595 
    565596    } else { 
    566597 
     
    646677    $upload_dir = wp_upload_dir(); 
    647678 
    648     wpthumb_rmdir_recursive( wpthumb_calculate_image_cache_dir( $upload_dir['basedir'] . $file ) ); 
    649  
    650     return $file; 
     679    $wpthumb = new WP_Thumb( $upload_dir['basedir'] . $file ); 
     680 
     681    wpthumb_rmdir_recursive( $wpthumb->getCacheFileDirectory() ); 
     682 
     683    return $file; 
    651684 
    652685} 
     
    654687 
    655688/** 
    656  * wpthumb_wm_check_for_submitted function. 
     689 * Removes a dir tree. I.e. recursive rmdir 
     690 * 
     691 * @param string $dir 
     692 * @return bool - success / failure 
     693 */ 
     694function wpthumb_rmdir_recursive( $dir ) { 
     695 
     696    if ( !is_dir( $dir ) ) 
     697        return false; 
     698 
     699    $dir = trailingslashit( $dir ); 
     700 
     701    $handle = opendir( $dir ); 
     702 
     703    while ( false !== ( $file = readdir( $handle ) ) ) { 
     704 
     705        if ( $file == '.' || $file == '..' ) 
     706            continue; 
     707 
     708        $path = $dir . $file; 
     709 
     710        if ( is_dir( $path ) ) 
     711            wpthumb_rmdir_recursive( $path ); 
     712 
     713        else 
     714            unlink( $path ); 
     715 
     716    } 
     717 
     718    closedir( $handle ); 
     719 
     720    rmdir( $dir ); 
     721 
     722} 
     723 
     724/** 
     725 * wpthumb_errors function. 
    657726 * 
    658727 * @access public 
    659728 * @return null 
    660729 */ 
    661 function wpthumb_wm_check_for_submitted() { 
    662  
    663     if ( !empty( $_POST['wpthumb_wm_watermark_position'] ) ) { 
    664  
    665         //is_multiple check 
    666         preg_match( '/multiple=([A-z0-9_][^&]*)/', $_POST['_wp_http_referer'], $multiple_matches ); 
    667         $multiple = $multiple_matches[1]; 
    668  
    669         preg_match( '/button=([A-z0-9_][^&]*)/', $_POST['_wp_http_referer'], $matches ); 
    670         $button_id = $matches[1]; 
    671  
    672         // If the custom button was pressed 
    673         if ( is_array( $_POST[$button_id] ) ) { 
    674  
    675             $attach_id = key( $_POST[$button_id] ); 
    676             $attach_thumb_url = wp_get_attachment_thumb_url( $attach_id ); 
    677  
    678             update_post_meta( $attach_id, 'use_watermark', $_POST['wpthumb_wm_use_watermark'][$attach_id] ); 
    679             update_post_meta( $attach_id, 'wpthumb_wm_position', $_POST['wpthumb_wm_watermark_position'][$attach_id] ); 
    680             update_post_meta( $attach_id, 'wpthumb_wm_padding', (int) $_POST['wpthumb_wm_watermark_padding'][$attach_id] ); 
    681  
    682         } 
    683     } 
    684 } 
    685 add_action( 'admin_head-media-upload-popup', 'wpthumb_wm_check_for_submitted' ); 
    686  
    687 /** 
    688  * wpthumb_wm_add_scripts function. 
     730function wpthumb_errors() { 
     731 
     732    $dir_upload = wp_upload_dir(); 
     733    $dir_upload = $dir_upload['path']; 
     734 
     735    if ( file_exists( $dir_upload ) && !is_writable( $dir_upload ) ) 
     736        echo '<div id="wpthumb-warning" class="updated fade"><p><strong>' . __( 'WPThumb has detected a problem.', 'wpthumb' ) . '</strong> ' . sprintf( __( 'The directory <code>%s</code> is not writable.', 'wpthumb' ), $dir_upload ) . '</p></div>'; 
     737} 
     738add_action( 'admin_notices', 'wpthumb_errors' ); 
     739 
     740/** 
     741 * wpthumb_test function. 
    689742 * 
    690743 * @access public 
    691744 * @return null 
    692745 */ 
    693 function wpthumb_wm_add_scripts() { 
    694  
    695     if ( !isset( $_GET['button'] ) || !$_GET['button'] ) 
    696         return; ?> 
    697  
    698     <script type="text/javascript"> 
    699  
    700         jQuery( '.add-watermark' ).live( 'click', function( e ) { 
    701             e.preventDefault(); 
    702             addWmPane = jQuery(this).closest('tr').next('tr'); 
    703             jQuery(addWmPane).show(); 
    704         } ); 
    705  
    706         jQuery(".wm-watermark-options a.preview-watermark").live('click', function(e) { 
    707             e.preventDefault(); 
    708             WMCreatePreview( jQuery(this).closest(".wm-watermark-options") ); 
    709         } ); 
    710  
    711         jQuery(".wm-watermark-options a.cancel-watermark").live('click', function(e) { 
    712             e.preventDefault(); 
    713             jQuery(this).closest(".wm-watermark-options").find("input.wpthumb_wm_use_watermark").removeAttr('checked'); 
    714             jQuery(this).closest("tr").hide(); 
    715         }); 
    716  
    717         function WMCreatePreview( optionsPane ) { 
    718             position = jQuery(optionsPane).find("select.wpthumb_wm_watermark_position").val(); 
    719             padding = jQuery(optionsPane).find("input.wpthumb_wm_watermark_padding").val(); 
    720  
    721             //show loading 
    722             jQuery(optionsPane).next(".wm-watermark-preview").html('<span class="wm-loading">Generating Preview...</span>'); 
    723  
    724             if ( typeof(WMCreatePreviewXHR) != 'undefined' ) 
    725                 WMCreatePreviewXHR.abort(); 
    726  
    727             WMCreatePreviewXHR = jQuery.get(jQuery(optionsPane).find("a.preview-watermark").attr("href"), { action: 'wpthumb_wm_watermark_preview_image', position: position, padding: padding, image_id: jQuery(optionsPane).attr('rel') }, 
    728             function(data){ 
    729                 jQuery(optionsPane).next(".wm-watermark-preview").html(data).show(); 
    730             }); 
    731         } 
    732  
    733     </script> 
    734  
    735     <style> 
    736         /* .A1B1 input[type=button] { display: none; } */ 
    737         .watermark { border: 1px solid #1B77AD; -moz-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; overflow: hidden; padding: 0 10px; } 
    738         .wm-watermark-options { width: 230px; font-size: 11px; float: left; } 
    739         .wm-watermark-preview { width: 205px; float: left; text-align: center; line-height: 180%; margin-top: 20px; } 
    740         .wm-watermark-options label { font-size: 11px; } 
    741         .wm-watermark-preview img { padding: 3px; border: 1px solid #a1a1a1; } 
    742         .wm-watermark-preview a {font-size: 11px; text-decoration: none; } 
    743         .wm-loading { line-height: 16px; text-align: center; width: 120px; background: url(<?php echo get_bloginfo('url') . '/wp-admin/images/loading.gif' ?>) no-repeat; padding-left: 20px; padding-top: 1px; padding-bottom: 2px; font-size: 11px; color: #999; } 
    744     </style> 
    745  
    746 <?php } 
    747 add_action( 'admin_head-media-upload-popup', 'wpthumb_wm_add_scripts' ); 
    748  
    749 /** 
    750  * wpthumb_wm_add_watermark_button function. 
    751  * 
    752  * @access public 
    753  * @param mixed $form_fields 
    754  * @param mixed $media 
    755  * @return null 
    756  */ 
    757 function wpthumb_wm_add_watermark_button( $form_fields, $media ) { 
    758  
    759     if ( !isset( $form_fields['buttons'] ) || !strpos( $form_fields['buttons']['tr'], 'Set as Post Image' ) ) 
    760         return $form_fields; 
    761  
    762     $button = '<a class="button add-watermark" rel="' . $media->ID . '">' . (wpthumb_wm_image_has_watermark($media->ID) ? 'Edit' : 'Add') .' Watermark</a>'; 
    763     $form_fields['buttons']['tr'] = substr( $form_fields['buttons']['tr'], 0, strlen($form_fields['buttons']['tr']) - 11) . $button . '</td></tr>'; 
    764     $form_fields['buttons']['tr'] .= ' 
    765         <tr style="display:none"><td></td><td> 
    766             <div class="watermark"> 
    767             <div rel="' . $media->ID . '" class="wm-watermark-options"> 
    768                 <p><label> 
    769                     <input class="wpthumb_wm_use_watermark" ' . (wpthumb_wm_image_has_watermark( $media->ID ) ? 'checked="checked"' : '') . ' type="checkbox" name="wpthumb_wm_use_watermark[' . $media->ID . ']" /> 
    770                     <strong>Apply watermark</strong> 
    771                 </label></p> 
    772                 <p><label>Positition</label> 
    773                     <select class="wpthumb_wm_watermark_position" name="wpthumb_wm_watermark_position[' . $media->ID . ']"> 
    774                         <option ' . ( wpthumb_wm_position($media->ID) == 'top-left' ? 'selected="selected"' : '' ) .' value="top-left">Top Left</option> 
    775                         <option ' . ( wpthumb_wm_position($media->ID) == 'top-right' ? 'selected="selected"' : '' ) .' value="top-right">Top Right</option> 
    776                         <option ' . ( wpthumb_wm_position($media->ID) == 'bottom-left' ? 'selected="selected"' : '' ) .' value="bottom-left">Bottom Left</option> 
    777                         <option ' . ( wpthumb_wm_position($media->ID) == 'bottom-left' ? 'selected="selected"' : '' ) .' value="bottom-right">Bottom Right</option> 
    778                     </select> 
    779                 </p> 
    780                 <p><label>Padding</label> 
    781                     <input class="wpthumb_wm_watermark_padding" type="text" value="' . wpthumb_wm_padding($media->ID) . '" style="width:30px" name="wpthumb_wm_watermark_padding[' . $media->ID . ']">px 
    782                 </p> 
    783                 <p><small>Padding (or gutter) is the space that the watermark appears from the edge of the image</small><br /></p> 
    784                 <p class="clear clearfix"> 
    785                     <input type="submit" name="afp_post_image[' . $media->ID . ']" class="button-primary" value="Add Watermark"> <a href="' . str_replace( ABSPATH, get_bloginfo('url') . '/', dirname( __FILE__ )) . '/watermark-actions.php' . '" class="button preview-watermark">Preview</a> | <a href="" class="cancel-watermark">Cancel</a> 
    786                 </p> 
    787             </div> 
    788             <div class="wm-watermark-preview"> 
    789             </div> 
    790             </div> 
    791         </td></tr>'; 
    792     return $form_fields; 
    793 } 
    794 add_filter( 'attachment_fields_to_edit', 'wpthumb_wm_add_watermark_button', 100, 2 ); 
    795  
    796 /** 
    797  * wpthumb_wm_watermark_preview_image function. 
    798  * 
    799  * @access public 
    800  * @param mixed $position 
    801  * @param mixed $padding 
    802  * @param mixed $image_id 
    803  * @return string 
    804  */ 
    805 function wpthumb_wm_watermark_preview_image( $position, $padding, $image_id ) { 
    806  
    807     $image = get_attached_file($image_id); 
    808     $watermark = array(); 
    809     $watermark['mask'] = get_template_directory() . '/images/watermark.png'; 
    810  
    811     if ( $position == 'top-left' ) 
    812         $watermark['position'] = 'lt'; 
    813  
    814     if ( $position == 'top-right' ) 
    815         $watermark['position'] = 'rt'; 
    816  
    817     if ( $position == 'bottom-left' ) 
    818         $watermark['position'] = 'lb'; 
    819  
    820     if ( $position == 'bottom-right' ) 
    821         $watermark['position'] = 'rb'; 
    822  
    823     $watermark['padding'] = (int) $padding; 
    824     $watermark['pre_resize'] = true; 
    825  
    826     return '<img src="' . wpthumb( $image, 200, 0, false, true, $watermark, false ) . '" /><a target="_blank" href="' . wpthumb( $image, 1000, 0, false, true, $watermark, false ) . '">View Large</a>'; 
    827 } 
    828  
    829 /** 
    830  * wpthumb_wm_image_has_watermark function. 
    831  * 
    832  * @access public 
    833  * @param mixed $image_id 
    834  * @return null 
    835  */ 
    836 function wpthumb_wm_image_has_watermark( $image_id ) { 
    837     return (bool) get_post_meta( $image_id, 'use_watermark', true ); 
    838 } 
    839  
    840 /** 
    841  * wpthumb_wm_position function. 
    842  * 
    843  * @access public 
    844  * @param mixed $image_id 
    845  * @return null 
    846  */ 
    847 function wpthumb_wm_position( $image_id ) { 
    848     return get_post_meta( $image_id, 'wpthumb_wm_position', true ); 
    849 } 
    850  
    851 /** 
    852  * wpthumb_wm_padding function. 
    853  * 
    854  * @access public 
    855  * @param mixed $image_id 
    856  * @return null 
    857  */ 
    858 function wpthumb_wm_padding( $image_id ) { 
    859     return (int) get_post_meta( $image_id, 'wpthumb_wm_padding', true ); 
    860 } 
    861  
    862 /** 
    863  * wpthumb_wm_get_options function. 
    864  * 
    865  * @access public 
    866  * @param mixed $id 
    867  * @return array 
    868  */ 
    869 function wpthumb_wm_get_options( $id ) { 
    870  
    871     if ( !wpthumb_wm_image_has_watermark( $id ) ) 
    872         return array(); 
    873  
    874     $options['mask'] = get_template_directory() . '/images/watermark.png'; 
    875     $options['padding'] = wpthumb_wm_padding($id); 
    876     $position = wpthumb_wm_position( $id ); 
    877  
    878     if ( $position == 'top-left' ) 
    879         $options['position'] = 'lt'; 
    880  
    881     if ( $position == 'top-right' ) 
    882         $options['position'] = 'rt'; 
    883  
    884     if ( $position == 'bottom-left' ) 
    885         $options['position'] = 'lb'; 
    886  
    887     if ( $position == 'bottom-right' ) 
    888         $options['position'] = 'rb'; 
    889  
    890     $options['pre_resize'] = true; 
    891  
    892     return $options; 
    893 } 
    894  
    895 /** 
    896  * Removes a dir tree. I.e. recursive rmdir 
    897  * 
    898  * @param string $dir 
    899  * @return bool - success / failure 
    900  */ 
    901 function wpthumb_rmdir_recursive( $dir ) { 
    902  
    903     if ( !is_dir( $dir ) ) 
    904         return false; 
    905  
    906     $dir = trailingslashit( $dir ); 
    907  
    908     $handle = opendir( $dir ); 
    909  
    910     while ( false !== ( $file = readdir( $handle ) ) ) { 
    911  
    912         if ( $file == '.' || $file == '..' ) 
    913             continue; 
    914  
    915         $path = $dir . $file; 
    916  
    917         if ( is_dir( $path ) ) 
    918             wpthumb_rmdir_recursive( $path ); 
    919  
    920         else 
    921             unlink( $path ); 
    922  
    923     } 
    924  
    925     closedir( $handle ); 
    926  
    927     rmdir( $dir ); 
    928  
    929 } 
    930  
    931 /** 
    932  * wpthumb_errors function. 
    933  * 
    934  * @access public 
    935  * @return null 
    936  */ 
    937 function wpthumb_errors() { 
    938  
    939     $dir_upload = wp_upload_dir(); 
    940     $dir_upload = $dir_upload['path']; 
    941  
    942     if ( file_exists( $dir_upload ) && !is_writable( $dir_upload ) ) 
    943         echo '<div id="wpthumb-warning" class="updated fade"><p><strong>' . __( 'WPThumb has detected a problem.', 'wpthumb' ) . '</strong> ' . sprintf( __( 'The directory <code>%s</code> is not writable.', 'wpthumb' ), $dir_upload ) . '</p></div>'; 
    944 } 
    945 add_action( 'admin_notices', 'wpthumb_errors' ); 
    946  
    947 /** 
    948  * wpthumb_test function. 
    949  * 
    950  * @access public 
    951  * @return null 
    952  */ 
    953746function wpthumb_test() { 
    954747 
     
    961754 
    962755    <img src="<?php echo wpthumb( $remote_image_src, 'width=100&height=100&crop=1' ) ?>" /> 
    963     <?php 
    964     $test_images_dir = dirname( __FILE__ ) . '/test-images'; 
    965  
    966     ?> 
     756 
     757    <?php $test_images_dir = dirname( __FILE__ ) . '/test-images'; ?> 
     758 
    967759    <style> 
    968760        body{ background: pink } 
Note: See TracChangeset for help on using the changeset viewer.