web-dev-qa-db-fra.com

est-il possible de forcer WordPress à toujours enregistrer les vignettes sous le format "jpg" et non "png"

Je ne vois aucun paramètre et je ne vois pas grand chose dans les documents api php à ce sujet?

par exemple, si le fichier d'origine est une png, wordpress est converti en jpg.

1
Alex

Voici quelque chose que j’ai écrit parce que mes clients utilisaient des fichiers pngs de très haute qualité, alors qu’ils pouvaient générer davantage de pertes en jpgs pour le Web. Notez que cela conserve toujours l'image d'origine, ne change que les vignettes. Ajoutez ceci à votre functions.php

<?php

//Force PNG Thumbnails into JPGs
add_filter('wp_generate_attachment_metadata','force_png_to_jpg');

function force_png_to_jpg($image_data) {

  $sizes = array('thumbnail','medium','large');

  $upload_dir = wp_upload_dir();
  $file = $upload_dir['path'] . '/' . basename($image_data['file']);

  foreach($sizes as $size){

    if(isset($image_data['sizes'][$size]))
    {
      if( $image_data['sizes'][$size]['mime-type'] == "image/png" ){

        //change format and filename for jpg
        $dest_file = preg_replace('/\.png$/i', '.jpg', $image_data['sizes'][$size]['file']);
        $image_data['sizes'][$size]['file'] = $dest_file;
        $image_data['sizes'][$size]['mime-type'] = "image/jpg";

        //process image into jpg using standard Gd lib
        $image = imagecreatefrompng($file);
        $bg = imagecreatetruecolor(imagesx($image), imagesy($image));
        imagefill($bg, 0, 0, imagecolorallocate($bg, 255, 255, 255));
        imagealphablending($bg, TRUE);
        imagecopy($bg, $image, 0, 0, 0, 0, imagesx($image), imagesy($image));
        $bg = imagescale($bg, $image_data['sizes'][$size]['width'], $image_data['sizes'][$size]['height'] );
        imagedestroy($image);

        //set quality and save
        $quality = 80; // 0 = worst / smaller file, 100 = better / bigger file 
        imagejpeg($bg, $upload_dir['path'] . '/' . $dest_file, $quality);
        imagedestroy($bg);
      }
    }
  }

  return $image_data;
}
3
Justin Fortier

Les vignettes seront enregistrées en utilisant le type mime du fichier.

Vous devrez créer vos propres fonctions en utilisant une extension ou une bibliothèque php. WordPress utilise Gd mais j'espère que cela sera transféré vers ImageMagick par 3,5 En utilisant l'API disponible dans l'extension, vous pouvez ajouter des crochets et des filtres pour convertir les images. Un bon point de départ serait de regarder les fonctions media_handle_download et media_sideload_image .

1
Chris_O