PHPフォームがあり、画像のアップロードを許可し、exif_imagetype();
をチェックして画像が有効であることを確認します。
ただし、PNG、JPG、JPEG、およびGIFのすべての形式を、一度送信するとPNGになるようにします。
どうすればこれを行うことができますか?
必要なのは imagepng()
thenです。実際、それはほとんどワンライナーになります:
imagepng(imagecreatefromstring(file_get_contents($filename)), "output.png");
ファイル名には$_FILES["id"]["tmp_name"]
を使用し、明らかに異なる出力ファイル名を使用します。しかし、画像フォーマットの調査自体は冗長になります。
画像の種類に基づいて、正しい機能を選択してファイルを開くことができます。
$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);
<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である場合、これは明らかにケースを処理しません。