¿Cómo escalar hacia arriba la miniatura destacada de una entrada?

30 abr 2012, 18:10:36
Vistas: 20.8K
Votos: 13

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.

1
Comentarios

Aquí hay un plugin que escribí para escalar miniaturas, basado en la solución de levi y correcciones de jackrugile. https://wordpress.org/support/plugin/thumbnail-upscale

khromov khromov
27 jul 2015 00:41:53
Todas las respuestas a la pregunta 2
6
24

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);
12 sept 2012 17:18:06
Comentarios

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?

Felix Eve Felix Eve
17 abr 2013 11:22:26

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.

Mark Rummel Mark Rummel
11 jul 2015 15:42:11

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; } }

jackrugile jackrugile
25 jul 2015 00:43:01

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.

Mtxz Mtxz
11 abr 2019 04:18:47

¿cómo hacer que funcione con la función add_image_size?

Gediminas Gediminas
16 ago 2019 14:53:56

sigue funcionando en WP 5.7

pathfinder pathfinder
22 mar 2021 04:40:06
Mostrar los 1 comentarios restantes
2

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!

30 abr 2012 18:35:25
Comentarios

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.

evaqas evaqas
1 may 2012 09:49:51

Hay un hook que puedes usar llamado "image_resize_dimensions" que te permitirá reescribir la función sin min().

levi levi
6 sept 2012 19:34:03