-
-
Save seedprod/1367237 to your computer and use it in GitHub Desktop.
<?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; | |
} | |
} |
I'm having issues with using vt_resize on multisite. I have tried adding timkinnane's parts as well. Returns file paths errors.
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
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!
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.
Where can I find the documentation ?
Hi, would it be possible to set a dynamic height? Any advice would be appreciated.
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
its woking fine in single site wordpress
but in multisite it is not working