Преобразование JPG / GIF изображения в PNG в PHP?

Возможный дубликат
Преобразование jpg изображения в формат gif, png и bmp с использованием PHP

У меня есть PHP-форма, которая позволяет загружать изображения и проверять exif_imagetype(); чтобы убедиться, что изображение действительно.

Тем не менее, я хочу, чтобы все форматы, PNG, JPG, JPEG и GIF были представлены PNG после отправки.

Как я могу это сделать?

Вам просто понадобится imagepng() . Фактически это почти становится однострочным:

  imagepng(imagecreatefromstring(file_get_contents($filename)), "output.png"); 

Вы должны использовать $_FILES["id"]["tmp_name"] для имени файла и, очевидно, другое имя выходного файла. Но само исследование изображения будет излишним.

Исходя из того, каким образом вы можете выбрать правильную функцию для открытия файла:

 $extension = pathinfo($filename, PATHINFO_EXTENSION); switch ($extension) { case 'jpg': case 'jpeg': $image = imagecreatefromjpeg($filename); break; case 'gif': $image = imagecreatefromgif($filename); break; case 'png': $image = imagecreatefrompng($filename); break; } 

Затем вы просто сохраните файл, используя:

 imagepng($image, $new_filename); 
 <form method="post" enctype="multipart/form-data"> <input type="file" name="image" /> <input type="submit" name="submit" value="Submit" /> </form> <?php if(isset($_POST['submit'])) { if(exif_imagetype($_FILES['image']['tmp_name']) == IMAGETYPE_GIF) { $newpng = 'image.png'; $png = imagepng(imagecreatefromgif($_FILES['image']['tmp_name']), $newpng); } elseif(exif_imagetype($_FILES['image']['tmp_name']) == IMAGETYPE_JPEG) { $newpng = 'image.png'; $png = imagepng(imagecreatefromjpeg($_FILES['image']['tmp_name']), $newpng); } else //already png { $newpng = 'image.png'; } } ?> 

Очень просто использовать gd-функции :

 switch (exif_imagetype($image)) { case IMAGETYPE_GIF : $img = imagecreatefromgif($image); break; case IMAGETYPE_JPEG : $img = imagecreatefromjpeg($image); break; default : throw new InvalidArgumentException('Invalid image type'); } imagepng($img, $filename); 

Для краткости это, очевидно, не обрабатывает случай, если изображение уже является PNG.