Sign up ×
WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It's 100% free, no registration required.

I cant see any settings and cant see much in the php api docs regarding this?

for instance if the original file upload is a png wordpress converts to jpg

share|improve this question
Can you explain why you would want this? – Tom J Nowell Feb 10 at 18:23

2 Answers 2

The thumbnails will be saved using the mime type of the file.

You will need to create your own functions using a php extension or or library. WordPress uses GD but hopefully this will be ported over to ImageMagick by 3.5 Using the API available in the extension you can add hooks and filters to convert the images. A good starting place would be o look ate the media_handle_download and media_sideload_image functions.

share|improve this answer

Here's something I wrote because my clients were using very high quality pngs, when they could be more lossy jpgs for web. Note this still preserves the original image, only changes the thumbnails. Add this to your functions.php


//Force PNG Thumbnails into JPGs

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( $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'] );

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

  return $image_data;
share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.