No damn timthumb.
function getyourowndamnfunctionprepend_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'];
$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'];
$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);
$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' => $image_src[1],
'height' => $image_src[2]
);
return $vt_image;
}