¿Cómo escalar hacia arriba la miniatura destacada de una entrada?
La situación es esta: Estoy usando el plugin Video Thumbnails para obtener y establecer automáticamente las miniaturas de YouTube/Vimeo como imagen destacada de la entrada. El problema es que los tamaños predeterminados de las miniaturas de YouTube/Vimeo son un poco más pequeños que el ancho del contenido principal de mi tema.
Entonces lo que necesito es escalarlas hacia arriba. Si voy a la Biblioteca de Medios, puedo editar cada imagen manualmente, luego establecer mi ancho exacto y WordPress la escala correctamente (no me importa que la calidad sea un poco peor). ¿Hay alguna manera de que WordPress haga esto automáticamente cada vez que se sube una imagen?
Este es mi tamaño de imagen definido: add_image_size('post-full', 688, 320, true);
El tamaño de la miniatura de Vimeo es 640x320.

Puedes usar la función nativa de Wordpress image_resize para escalar imágenes. Wordpress proporciona un hook llamado "image_resize_dimensions" que puedes usar para sobrescribir los ajustes de recorte predeterminados. Aquí tienes una función modificada que soportará el escalado hacia arriba:
function image_crop_dimensions($default, $orig_w, $orig_h, $new_w, $new_h, $crop){
if ( !$crop ) return null; // dejar que la función predeterminada de wordpress maneje esto
$aspect_ratio = $orig_w / $orig_h;
$size_ratio = max($new_w / $orig_w, $new_h / $orig_h);
$crop_w = round($new_w / $size_ratio);
$crop_h = round($new_h / $size_ratio);
$s_x = floor( ($orig_w - $crop_w) / 2 );
$s_y = floor( ($orig_h - $crop_h) / 2 );
return array( 0, 0, (int) $s_x, (int) $s_y, (int) $new_w, (int) $new_h, (int) $crop_w, (int) $crop_h );
}
Ahora engancha esta función así:
add_filter('image_resize_dimensions', 'image_crop_dimensions', 10, 6);
Una vez hecho esto, puedes usar la función image_resize para escalar imágenes hacia arriba o abajo según sea necesario.
$cropped_image = image_resize($image_filepath, $width, $height, true);

Estoy usando este método, pero cuando intento generar la imagen recortada, solo obtengo el error: "Image Editor Save Failed" (Error al guardar el editor de imágenes) - ¿alguna idea?

Sigue funcionando perfectamente en julio de 2015 con WordPress 4.1.5. Exactamente lo que necesitaba para asegurarme de que las imágenes pequeñas se escalaran correctamente como imágenes destacadas de mis publicaciones.

Para aquellos que buscan soportar la opción de posición de recorte, agreguen el siguiente código justo antes del return de la función:
if( is_array( $crop ) ) { if( $crop[ 0 ] === 'left' ) { $s_x = 0; } else if( $crop[ 0 ] === 'right' ) { $s_x = $orig_w - $crop_w;} if( $crop[ 1 ] === 'top' ) { $s_y = 0; } else if( $crop[ 1 ] === 'bottom' ) { $s_y = $orig_h - $crop_h; } }

Sigue funcionando perfectamente en abril 2019 con WordPress 5.1.1. Lo uso para forzar el escalado de imágenes que son más pequeñas que el tamaño personalizado deseado con add_image_size
. Junto con el plugin Regenerate Thumbnails.

La forma más sencilla sería añadir un tamaño de imagen de 640x298 y usar CSS para redimensionarlo. Como es solo un escalado menor, el ajuste del navegador debería funcionar bastante bien.
Desafortunadamente, todos los plugins que conozco no proporcionan aumento de tamaño de imagen, solo generan tamaños de imagen más pequeños, así que si quieres tener el 688x320 en tu servidor, tendrías que editar uno de los plugins existentes.
Si tienes Imagick instalado, puedes modificar tu plugin en el archivo video-thumbnails.php en la línea 325, generando una versión más grande de la miniatura, usando este código:
$image_big = new Imagick();
$image_big->setOption('jpeg:size', '688x344');
$image_big->readImage($new_thumbnail);
$upload = wp_upload_bits( basename( $new_thumbnail ), null, $image_big );
y dejar que WordPress genere la miniatura más pequeña a partir de ella (recortando la altura). ¡Asegúrate de crear diferentes tamaños de imagen para las diferentes plataformas de video en tu código Imagick!

Creo que iré con la solución CSS por ahora, es realmente la forma más fácil/rápida en mi situación. También revisé los archivos principales de WP y parece que la función de redimensionamiento usa min(); para determinar el ancho/alto mínimo y no hay hooks para modificar eso, así que no escalará mis imágenes al subirlas.
