web-dev-qa-db-ja.com

PHPでJPG / GIF画像をPNGに変換しますか?

の重複の可能性
PHPを使用してjpg画像をgif、png、bmp形式に変換する

PHPフォームがあり、画像のアップロードを許可し、exif_imagetype();をチェックして画像が有効であることを確認します。

ただし、PNG、JPG、JPEG、およびGIFのすべての形式を、一度送信するとPNGになるようにします。

どうすればこれを行うことができますか?

31
Aaron

必要なのは imagepng() thenです。実際、それはほとんどワンライナーになります:

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

ファイル名には$_FILES["id"]["tmp_name"]を使用し、明らかに異なる出力ファイル名を使用します。しかし、画像フォーマットの調査自体は冗長になります。

84
mario

画像の種類に基づいて、正しい機能を選択してファイルを開くことができます。

$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); 
11
Cyclonecode
<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';
    }       
}
?>
2

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である場合、これは明らかにケースを処理しません。

1
deceze