J'ai un formulaire de publication frontale et j'utilise ce code PHP pour permettre le téléchargement d'une image et l'insérer dans une publication.
// image upload and attatching to post
if ( ! empty( $_FILES ) && ! empty( $_FILES['upload-image']['name'] ) ) {
// upload image to server
$upload = wp_upload_bits( $_FILES['upload-image']['name'], null, file_get_contents( $_FILES['upload-image']['tmp_name'] ) );
// insert new image to the just created post ================================
$wp_filetype = wp_check_filetype( basename( $upload['file'] ), null );
$wp_upload_dir = wp_upload_dir();
$attachment = array(
'guid' => $wp_upload_dir['baseurl'] . _wp_relative_upload_path( $upload['file'] ),
'post_mime_type' => $wp_filetype['type'],
'post_title' => preg_replace('/\.[^.]+$/', '', basename( $upload['file'] )),
'post_content' => '',
'post_status' => 'inherit'
);
$attach_id = wp_insert_attachment( $attachment, $upload['file'], $post_id );
require_once(ABSPATH . 'wp-admin/includes/image.php');
$attach_data = wp_generate_attachment_metadata( $attach_id, $upload['file'] );
wp_update_attachment_metadata( $attach_id, $attach_data );
update_post_meta( $post_id, '_thumbnail_id', $attach_id );
// end insert ==============================================
}
Comment puis-je m'assurer que toutes les images sont recadrées au format 16: 9 avant d'être insérées dans le message? Donc, si la hauteur de l'image est trop élevée, elle recadre le haut et le bas pour l'adapter au rapport 16: 9, et si la largeur de l'image est trop large, elle recadre les côtés pour l'adapter au rapport 16: 9.
J'ai trouvé une fonction qui recadre toujours l'image au format 16: 9 ici sur laquelle je pourrais la baser: https://stackoverflow.com/questions/29063094/php-fit-any-size-image -to-169-aspect-ratio (non testé). Mais je ne sais pas comment utiliser cela dans mon code ci-dessus - l'image au rapport 16: 9 doit être prête avant de l'insérer dans le message.
Toute aide appréciée.
Je pense que vous êtes bon, mais vous n'avez pas besoin d'utiliser d'autres fonctions. Vous avez tout
File: wp-includes/media.php
Par exemple, vous pouvez _wp_get_image_size_from_meta
pour obtenir les dimensions de l'image, vous n'avez donc pas besoin d'utiliser quelque chose comme ceci:
$size = getimagesize($file);
$width = $size[0];
$height = $size[1];
$mime = $size['mime'];
Pour obtenir les dimensions et le type d'image.
En revanche, on ne sait pas pourquoi ne pas utiliser add_image_size
File: wp-includes/media.php
256: /**
257: * Register a new image size.
258: *
259: * Cropping behavior for the image size is dependent on the value of $crop:
260: * 1. If false (default), images will be scaled, not cropped.
261: * 2. If an array in the form of array( x_crop_position, y_crop_position ):
262: * - x_crop_position accepts 'left' 'center', or 'right'.
263: * - y_crop_position accepts 'top', 'center', or 'bottom'.
264: * Images will be cropped to the specified dimensions within the defined crop area.
265: * 3. If true, images will be cropped to the specified dimensions using center positions.
266: *
267: * @since 2.9.0
268: *
269: * @global array $_wp_additional_image_sizes Associative array of additional image sizes.
270: *
271: * @param string $name Image size identifier.
272: * @param int $width Image width in pixels.
273: * @param int $height Image height in pixels.
274: * @param bool|array $crop Optional. Whether to crop images to specified width and height or resize.
275: * An array can specify positioning of the crop area. Default false.
276: */
277: function add_image_size( $name, $width = 0, $height = 0, $crop = false ) {
278: global $_wp_additional_image_sizes;
279:
280: $_wp_additional_image_sizes[ $name ] = array(
281: 'width' => absint( $width ),
282: 'height' => absint( $height ),
283: 'crop' => $crop,
284: );
285: }
Vous pouvez définir le $crop
sur true, et créez des miniatures au format 16: 9. Cela organise vos images à une taille particulière.
Vous pouvez ajouter plusieurs fois:
add_image_size( 'andy1', 160, 90 , true);
add_image_size( 'andy2', 1600, 900, true);
Et si possible, des miniatures seront créées, et comme vous le souhaitez.
Si vous travaillez avec image srcset
attribut cela est pratique.