Преобразование JPG/GIF изображения в PNG в PHP?
Возможный дубликат
Преобразование jpg-изображения в формат gif, png и bmp с использованием PHP
У меня есть PHP-форма, которая позволяет загружать изображения и проверять exif_imagetype();
, чтобы убедиться, что изображение действительно.
Тем не менее, я хочу, чтобы все форматы, PNG, JPG, JPEG и GIF были представлены PNG после отправки.
Как я могу это сделать?
Ответы
Ответ 1
Вам просто нужно imagepng()
. Фактически он почти становится однострочным:
imagepng(imagecreatefromstring(file_get_contents($filename)), "output.png");
Вы использовали бы $_FILES["id"]["tmp_name"]
для имени файла и, очевидно, другое имя выходного файла. Но само исследование изображения будет излишним.
Ответ 2
В зависимости от типа изображения вы можете выбрать правильную функцию для открытия файла:
$extension = strtolower(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, $quality);
Ответ 3
<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';
}
}
?>
Ответ 4
Очень просто использовать функции 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.