Last active
February 13, 2016 19:51
-
-
Save twentyfortysix/5092510 to your computer and use it in GitHub Desktop.
WP - resize images on the fly
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* originally by http://core.trac.wordpress.org/ticket/15311 | |
* updated for WP 3.5 by me, who else :) | |
* Resize images dynamically using wp built in functions | |
* Victor Teixeira | |
* | |
* php 5.2+ | |
* | |
* Exemplo de uso: | |
* | |
* <?php | |
* $thumb = get_post_thumbnail_id(); | |
* $image = f2046_live_image_size( $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 | |
*/ | |
function f2046_live_image_size( $attach_id = null, $img_url = null, $width, $height, $crop = true ) { | |
// 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']; | |
//$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 ); | |
$extension = '.'. $file_info['extension']; | |
// the image path without the extension | |
$no_ext_path = $file_info['dirname'].'/'.$file_info['filename']; | |
/* Calculate the eventual height and width for accurate file name */ | |
if ( $crop == false ) { | |
$proportional_size = wp_constrain_dimensions( $image_src[1], $image_src[2], $width, $height ); | |
$width = $proportional_size[0]; | |
$height = $proportional_size[1]; | |
} | |
$cropped_img_path = $no_ext_path.'-'.$width.'x'.$height.$extension; | |
//$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 || $image_src[2] > $height ) { | |
// 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 | |
if ( $crop == false ) { | |
// 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; | |
} | |
} | |
// no cache files - let's finally resize it | |
// $new_img_path = image_resize( $file_path, $width, $height, $crop ); | |
$image = wp_get_image_editor( $file_path ); | |
if ( ! is_wp_error( $image ) ) { | |
// $image->rotate( 90 ); | |
$image->resize( $width, $height, $crop ); | |
// $image->save( 'new_image.jpg' ); | |
$new_img_path = $image->save( $file_path ); | |
} | |
// var_dump($new_img_path); | |
$new_img_size = getimagesize( $new_img_path['path'] ); | |
$new_img = str_replace( basename( $image_src[0] ), basename( $new_img_path['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' => $image_src[1], | |
'height' => $image_src[2] | |
); | |
return $vt_image; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment