Skip to content

Instantly share code, notes, and snippets.

@xr0m3oz
Created March 23, 2015 12:39
Show Gist options
  • Select an option

  • Save xr0m3oz/cd1624937387e6a8e14c to your computer and use it in GitHub Desktop.

Select an option

Save xr0m3oz/cd1624937387e6a8e14c to your computer and use it in GitHub Desktop.

Revisions

  1. xr0m3oz created this gist Mar 23, 2015.
    151 changes: 151 additions & 0 deletions wp_resize.php
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,151 @@
    <?php
    /*
    * Resize images dynamically using wp built in functions
    * Victor Teixeira
    *
    * php 5.2+
    *
    * Exemplo de uso:
    *
    * <?php
    * $thumb = get_post_thumbnail_id();
    * $image = vt_resize( $thumb, '', 140, 110, true );
    * ?>
    * <img src="<?php echo $image[url]; ?>" width="<?php echo $image[width]; ?>" height="<?php echo $image[height]; ?>" />
    *
    * @param int $attach_id
    * @param string $img_url
    * @param int $width
    * @param int $height
    * @param bool $crop
    * @return array
    */
    if ( !function_exists( 'vt_resize') ) {
    function vt_resize( $attach_id = null, $img_url = null, $width, $height, $crop = false ) {

    // this is an attachment, so we have the ID
    if ( $attach_id ) {

    $image_src = wp_get_attachment_image_src( $attach_id, 'full' );
    $file_path = get_attached_file( $attach_id );

    // this is not an attachment, let's use the image url
    } else if ( $img_url ) {

    $file_path = parse_url( $img_url );
    $file_path = $_SERVER['DOCUMENT_ROOT'] . $file_path['path'];

    // Look for Multisite Path
    if(file_exists($file_path) === false){
    global $blog_id;
    $file_path = parse_url( $img_url );
    if (preg_match("/files/", $file_path['path'])) {
    $path = explode('/',$file_path['path']);
    foreach($path as $k=>$v){
    if($v == 'files'){
    $path[$k-1] = 'wp-content/blogs.dir/'.$blog_id;
    }
    }
    $path = implode('/',$path);
    }
    $file_path = $_SERVER['DOCUMENT_ROOT'].$path;
    }
    //$file_path = ltrim( $file_path['path'], '/' );
    //$file_path = rtrim( ABSPATH, '/' ).$file_path['path'];

    $orig_size = getimagesize( $file_path );

    $image_src[0] = $img_url;
    $image_src[1] = $orig_size[0];
    $image_src[2] = $orig_size[1];
    }

    $file_info = pathinfo( $file_path );

    // check if file exists
    $base_file = $file_info['dirname'].'/'.$file_info['filename'].'.'.$file_info['extension'];
    if ( !file_exists($base_file) )
    return;

    $extension = '.'. $file_info['extension'];

    // the image path without the extension
    $no_ext_path = $file_info['dirname'].'/'.$file_info['filename'];

    $cropped_img_path = $no_ext_path.'-'.$width.'x'.$height.$extension;

    // checking if the file size is larger than the target size
    // if it is smaller or the same size, stop right here and return
    if ( $image_src[1] > $width ) {

    // the file is larger, check if the resized version already exists (for $crop = true but will also work for $crop = false if the sizes match)
    if ( file_exists( $cropped_img_path ) ) {

    $cropped_img_url = str_replace( basename( $image_src[0] ), basename( $cropped_img_path ), $image_src[0] );

    $vt_image = array (
    'url' => $cropped_img_url,
    'width' => $width,
    'height' => $height
    );

    return $vt_image;
    }

    // $crop = false or no height set
    if ( $crop == false OR !$height ) {

    // calculate the size proportionaly
    $proportional_size = wp_constrain_dimensions( $image_src[1], $image_src[2], $width, $height );
    $resized_img_path = $no_ext_path.'-'.$proportional_size[0].'x'.$proportional_size[1].$extension;

    // checking if the file already exists
    if ( file_exists( $resized_img_path ) ) {

    $resized_img_url = str_replace( basename( $image_src[0] ), basename( $resized_img_path ), $image_src[0] );

    $vt_image = array (
    'url' => $resized_img_url,
    'width' => $proportional_size[0],
    'height' => $proportional_size[1]
    );

    return $vt_image;
    }
    }

    // check if image width is smaller than set width
    $img_size = getimagesize( $file_path );
    if ( $img_size[0] <= $width ) $width = $img_size[0];

    // Check if GD Library installed
    if (!function_exists ('imagecreatetruecolor')) {
    echo 'GD Library Error: imagecreatetruecolor does not exist - please contact your webhost and ask them to install the GD library';
    return;
    }

    // no cache files - let's finally resize it
    $new_img_path = image_resize( $file_path, $width, $height, $crop );
    $new_img_size = getimagesize( $new_img_path );
    $new_img = str_replace( basename( $image_src[0] ), basename( $new_img_path ), $image_src[0] );

    // resized output
    $vt_image = array (
    'url' => $new_img,
    'width' => $new_img_size[0],
    'height' => $new_img_size[1]
    );

    return $vt_image;
    }

    // default output - without resizing
    $vt_image = array (
    'url' => $image_src[0],
    'width' => $width,
    'height' => $height
    );

    return $vt_image;
    }
    }