Как преобразовать все изображения в jpg?

У меня есть сценарий:

<?php include('db.php'); session_start(); $session_id = '1'; // User session id $path = "uploads/"; $valid_formats = array("jpg", "png", "gif", "bmp", "jpeg"); if (isset($_POST) and $_SERVER['REQUEST_METHOD'] == "POST") { $name = $_FILES['photoimg']['name']; $size = $_FILES['photoimg']['size']; if (strlen($name)) { list($txt, $ext) = explode(".", $name); if (in_array($ext, $valid_formats)) { if ($size < (1024 * 1024)) { // Image size max 1 MB $actual_image_name = time() . $session_id . "." . $ext; $tmp = $_FILES['photoimg']['tmp_name']; if (move_uploaded_file($tmp, $path . $actual_image_name)) { mysql_query("UPDATE users SET profile_image='$actual_image_name' WHERE uid='$session_id'"); echo "<img src='uploads/" . $actual_image_name . "' class='preview'>"; } else { echo "failed"; } } else { echo "Image file size max 1 MB"; } } else { echo "Invalid file format.."; } } else { echo "Please select image..!"; } exit; } ?> 

Возможно ли конвертировать все изображения (png, gif и т. Д.) В jpg со 100% качеством? Если да, то как? Я бы хотел разрешить загрузку png и gif, но этот скрипт должен преобразовать эти файлы в jpg. Возможно ли это с PHP?

Попробуйте этот код: originalImage – это путь … оригинального изображения … outputImage достаточно объясняет. Quality – это число от 0 до 100, устанавливающее качество выходного jpg (0 – наихудшее, 100 – лучшее)

 function convertImage($originalImage, $outputImage, $quality) { // jpg, png, gif or bmp? $exploded = explode('.',$originalImage); $ext = $exploded[count($exploded) - 1]; if (preg_match('/jpg|jpeg/i',$ext)) $imageTmp=imagecreatefromjpeg($originalImage); else if (preg_match('/png/i',$ext)) $imageTmp=imagecreatefrompng($originalImage); else if (preg_match('/gif/i',$ext)) $imageTmp=imagecreatefromgif($originalImage); else if (preg_match('/bmp/i',$ext)) $imageTmp=imagecreatefrombmp($originalImage); else return 0; // quality is a value from 0 (worst) to 100 (best) imagejpeg($imageTmp, $outputImage, $quality); imagedestroy($imageTmp); return 1; } 

Попробуйте использовать Imagick setImageFormat , для меня он обеспечивает наилучшее качество изображения
http://php.net/manual/en/imagick.setimageformat.php

 $im = new imagick($image); // convert to png $im->setImageFormat('png'); //write image on server $im->writeImage($image .".png"); $im->clear(); $im->destroy(); 

небольшое исправление для ответа davide, правильная функция для преобразования из BMP – «imagecreatefrom w bmp» вместо imagecreatefrombmp (отсутствует «w»), также вы должны учитывать, что png может быть прозрачным, вот способ заполнить его белым BG ( jpeg не может применять альфа-данные).

 function convertImage($originalImage, $outputImage, $quality){ // jpg, png, gif or bmp? $exploded = explode('.',$originalImage); $ext = $exploded[count($exploded) - 1]; if (preg_match('/jpg|jpeg/i',$ext)){$imageTmp=imagecreatefromjpeg($originalImage);} else if (preg_match('/png/i',$ext)){$imageTmp=imagecreatefrompng($originalImage);} else if (preg_match('/gif/i',$ext)){$imageTmp=imagecreatefromgif($originalImage);} else if (preg_match('/bmp/i',$ext)){$imageTmp=imagecreatefromwbmp($originalImage);} else { return false;} // quality is a value from 0 (worst) to 100 (best) imagejpeg($imageTmp, $outputImage, $quality); imagedestroy($imageTmp); return true; } 

Небольшой код для преобразования image.png в image.jpg при желаемом качестве изображения:

 <?php $image = imagecreatefrompng('image.png'); imagejpeg($image, 'image.jpg', 70); // 0 = worst / smaller file, 100 = better / bigger file imagedestroy($image); ?> 

Из PhpTools:

 /** * @param string $source (accepted jpg, gif & png filenames) * @param string $destination * @param int $quality [0-100] * @throws \Exception */ public function convertToJpeg($source, $destination, $quality = 100) { if ($quality < 0 || $quality > 100) { throw new \Exception("Param 'quality' out of range."); } if (!file_exists($source)) { throw new \Exception("Image file not found."); } $ext = pathinfo($source, PATHINFO_EXTENSION); if (preg_match('/jpg|jpeg/i', $ext)) { $image = imagecreatefromjpeg($source); } else if (preg_match('/png/i', $ext)) { $image = imagecreatefrompng($source); } else if (preg_match('/gif/i', $ext)) { $image = imagecreatefromgif($source); } else { throw new \Exception("Image isn't recognized."); } $result = imagejpeg($image, $destination, $quality); if (!$result) { throw new \Exception("Saving to file exception."); } imagedestroy($image); } 

Ответ Давиде Берры велик, поэтому я немного улучшил обнаружение типа файла, используя exif_imagetype () вместо того, чтобы полагаться на расширение файла:

 /** * Auxiliar function to convert images to JPG */ function convertImage($originalImage, $outputImage, $quality) { switch (exif_imagetype($originalImage)) { case IMAGETYPE_PNG: $imageTmp=imagecreatefrompng($originalImage); break; case IMAGETYPE_JPEG: $imageTmp=imagecreatefromjpeg($originalImage); break; case IMAGETYPE_GIF: $imageTmp=imagecreatefromgif($originalImage); break; case IMAGETYPE_BMP: $imageTmp=imagecreatefrombmp($originalImage); break; // Defaults to JPG default: $imageTmp=imagecreatefromjpeg($originalImage); break; } // quality is a value from 0 (worst) to 100 (best) imagejpeg($imageTmp, $outputImage, $quality); imagedestroy($imageTmp); return 1; } 

Вы должны иметь расширение php_exif, чтобы использовать это.