Create a gist now

Instantly share code, notes, and snippets.

What would you like to do?
Resize WordPress images on the fly vt_resize w/ multisite support
<?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;
}
}
@seedprod

This comment has been minimized.

Show comment Hide comment
@seedprod

seedprod Mar 29, 2012

Very cool, thanks for the tip :)

Owner

seedprod commented Mar 29, 2012

Very cool, thanks for the tip :)

@seedprod

This comment has been minimized.

Show comment Hide comment
@seedprod

seedprod Jun 14, 2012

Owner

seedprod commented Jun 14, 2012

@urooj105

This comment has been minimized.

Show comment Hide comment
@urooj105

urooj105 Jul 31, 2012

its woking fine in single site wordpress
but in multisite it is not working

its woking fine in single site wordpress
but in multisite it is not working

@vegaix9

This comment has been minimized.

Show comment Hide comment
@vegaix9

vegaix9 Jan 8, 2013

I'm having issues with using vt_resize on multisite. I have tried adding timkinnane's parts as well. Returns file paths errors.

vegaix9 commented Jan 8, 2013

I'm having issues with using vt_resize on multisite. I have tried adding timkinnane's parts as well. Returns file paths errors.

@zitrusman

This comment has been minimized.

Show comment Hide comment
@zitrusman

zitrusman Jan 22, 2013

Hey. Thanks for that package!!! Great work.

Wondering if you noticed, that the image_resize function is deprecated since Wordpress 3.5. https://codex.wordpress.org/Function_Reference/image_resize

Instead they use WP_Image_Editor instead.
https://codex.wordpress.org/Class_Reference/WP_Image_Editor

Any plans to change that???

Cheers

Hey. Thanks for that package!!! Great work.

Wondering if you noticed, that the image_resize function is deprecated since Wordpress 3.5. https://codex.wordpress.org/Function_Reference/image_resize

Instead they use WP_Image_Editor instead.
https://codex.wordpress.org/Class_Reference/WP_Image_Editor

Any plans to change that???

Cheers

@CharlyLeetham

This comment has been minimized.

Show comment Hide comment
@CharlyLeetham

CharlyLeetham Mar 10, 2013

Thank you so much for this code. A couple of changes were required:

Line 46 added a '/' in front of wp-content:
$path[$k-1] = '/wp-content/blogs.dir/'.$blog_id;

Line 78, changed the test to accept images that were the same width as the source image and crop=true:
if ( ($image_src[1] > $width ) || ($image_src[1] >= $width && $crop==true)) {

It works really well! Thank you again!

Thank you so much for this code. A couple of changes were required:

Line 46 added a '/' in front of wp-content:
$path[$k-1] = '/wp-content/blogs.dir/'.$blog_id;

Line 78, changed the test to accept images that were the same width as the source image and crop=true:
if ( ($image_src[1] > $width ) || ($image_src[1] >= $width && $crop==true)) {

It works really well! Thank you again!

@bestimage

This comment has been minimized.

Show comment Hide comment
@bestimage

bestimage Jan 23, 2014

here are some codes on image resizing i'd like to share with you . hope it helps you.

Private Sub button1_Click(sender As Object, e As EventArgs)
Dim fileName As String = "c:/Sample.png"

        Dim reImage As REImage = REFile.OpenImageFile(fileName)

        ImageProcessing.ApplyResize(reImage, 500, 500)

        REFile.SaveImageFile(reImage, "c:/reimage.png", New PNGEncoder())
    End Sub

if you need other image programming codes, you can find out in that website as well.

here are some codes on image resizing i'd like to share with you . hope it helps you.

Private Sub button1_Click(sender As Object, e As EventArgs)
Dim fileName As String = "c:/Sample.png"

        Dim reImage As REImage = REFile.OpenImageFile(fileName)

        ImageProcessing.ApplyResize(reImage, 500, 500)

        REFile.SaveImageFile(reImage, "c:/reimage.png", New PNGEncoder())
    End Sub

if you need other image programming codes, you can find out in that website as well.

@corpora731

This comment has been minimized.

Show comment Hide comment
@corpora731

corpora731 Jul 21, 2014

Where can I find the documentation ?

Where can I find the documentation ?

@Cozmoz

This comment has been minimized.

Show comment Hide comment
@Cozmoz

Cozmoz Oct 9, 2015

Hi, would it be possible to set a dynamic height? Any advice would be appreciated.

Cozmoz commented Oct 9, 2015

Hi, would it be possible to set a dynamic height? Any advice would be appreciated.

@JoelLisenby

This comment has been minimized.

Show comment Hide comment
@JoelLisenby

JoelLisenby May 9, 2016

I have created an alternative vt_resize() function that uses WP_Image_Editor class instead of image_resize to get rid of the deprecated function image_resize error.

https://gist.github.com/JoelLisenby/70a38cc1065dbcb26d0cd2f8392f0342

I have created an alternative vt_resize() function that uses WP_Image_Editor class instead of image_resize to get rid of the deprecated function image_resize error.

https://gist.github.com/JoelLisenby/70a38cc1065dbcb26d0cd2f8392f0342

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment