PHPで画像をJPEG・PNG・GIFに変換してアップロードする機能を作る方法【サンプルコード付き】

php

PHPで画像をJPEG・PNG・GIFに変換してアップロードする機能を作る方法

PHPで画像をJPEG・PNG・GIFに変換してアップロードする機能を作る方法を紹介します。アップロードした画像を指定した画像形式へ変換し、自動で保存できるサンプルです。画像形式を統一したい場合や、Webサイトへの画像登録機能、画像管理システムなどを作成したい場合に利用できます。

コードについて 本記事のコードはサンプルコードです。ご利用前に必ず動作確認を行ってください。
免責事項 本コードの利用により発生した損害について、当サイトは一切の責任を負いません。

デモ

画像変換アップロードフォーム

コードをコピーして使おう!

<?php

// アップロード先フォルダ名です
$upload_dir = 'uploads';

// フォルダが存在しない場合は自動で作成します
if (!is_dir($upload_dir)) {
    mkdir($upload_dir, 0777, true);
}

$message = '';

// フォーム送信時の処理です
if ($_SERVER['REQUEST_METHOD'] === 'POST') {

    // 画像ファイルが選択されているか確認します
    if (
        isset($_FILES['image']) &&
        $_FILES['image']['error'] === UPLOAD_ERR_OK
    ) {

        // 変換後の形式を取得します
        $format = $_POST['format'] ?? 'jpg';

        // アップロードされた画像の情報を取得します
        $tmp_name = $_FILES['image']['tmp_name'];
        $image_info = getimagesize($tmp_name);

        if ($image_info !== false) {

            // 元画像の形式に合わせて画像を読み込みます
            switch ($image_info['mime']) {
                case 'image/jpeg':
                    $source_image = imagecreatefromjpeg($tmp_name);
                    break;

                case 'image/png':
                    $source_image = imagecreatefrompng($tmp_name);
                    break;

                case 'image/gif':
                    $source_image = imagecreatefromgif($tmp_name);
                    break;

                default:
                    $source_image = false;
                    break;
            }

            if ($source_image !== false) {

                // 元のファイル名(拡張子なし)を取得します
$file_name = pathinfo($_FILES['image']['name'], PATHINFO_FILENAME);

                if ($format === 'png') {
                    $save_path = $upload_dir . '/' . $file_name . '.png';
                    imagepng($source_image, $save_path);
                    $message = '画像をPNG形式に変換してアップロードしました。';
                } elseif ($format === 'gif') {
                    $save_path = $upload_dir . '/' . $file_name . '.gif';
                    imagegif($source_image, $save_path);
                    $message = '画像をGIF形式に変換してアップロードしました。';
                } else {
                    $save_path = $upload_dir . '/' . $file_name . '.jpg';
                    imagejpeg($source_image, $save_path, 90);
                    $message = '画像をJPEG形式に変換してアップロードしました。';
                }

                // メモリを解放します
                imagedestroy($source_image);

            } else {
                $message = 'JPEG・PNG・GIF画像を選択してください。';
            }

        } else {
            $message = '画像ファイルを選択してください。';
        }

    } else {
        $message = '画像ファイルを選択してください。';
    }

}

?>

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>画像変換アップロード</title>

<style>
body{
    font-family:sans-serif;
    background:#f8fafc;
    margin:40px;
}

.php-image-convert-upload_wrap{
    max-width:600px;
    margin:0 auto;
    padding:24px;
    border:1px solid #e5e7eb;
    border-radius:18px;
    background:#ffffff;
}

.php-image-convert-upload_title{
    font-size:22px;
    font-weight:bold;
    margin-bottom:20px;
}

.php-image-convert-upload_field{
    display:flex;
    flex-direction:column;
    gap:6px;
    margin-bottom:14px;
}

.php-image-convert-upload_label{
    font-weight:bold;
}

.php-image-convert-upload_input,
.php-image-convert-upload_select{
    width:100%;
    box-sizing:border-box;
    padding:12px;
    border:1px solid #d1d5db;
    border-radius:10px;
    background:#ffffff;
}

.php-image-convert-upload_btn{
    width:100%;
    height:46px;
    border:none;
    border-radius:10px;
    background:#0b6bff;
    color:#ffffff;
    font-weight:bold;
    cursor:pointer;
}

.php-image-convert-upload_result{
    margin-top:16px;
    padding:14px;
    border:1px solid #bbf7d0;
    border-radius:12px;
    background:#f0fdf4;
    color:#15803d;
}
</style>

</head>
<body>

<div class="php-image-convert-upload_wrap">

    <div class="php-image-convert-upload_title">
        画像変換アップロードフォーム
    </div>

    <form method="post" enctype="multipart/form-data">

        <div class="php-image-convert-upload_field">
            <label class="php-image-convert-upload_label">
                画像ファイル
            </label>

            <input
                class="php-image-convert-upload_input"
                type="file"
                name="image"
                accept="image/*"
            >
        </div>

        <div class="php-image-convert-upload_field">
            <label class="php-image-convert-upload_label">
                変換後の形式
            </label>

            <select class="php-image-convert-upload_select" name="format">
                <option value="jpg">JPEG</option>
                <option value="png">PNG</option>
                <option value="gif">GIF</option>
            </select>
        </div>

        <button class="php-image-convert-upload_btn" type="submit">
            変換してアップロードする
        </button>

    </form>

    <?php if ($message !== ''): ?>
        <div class="php-image-convert-upload_result">
            <?= htmlspecialchars($message, ENT_QUOTES, 'UTF-8') ?>
        </div>
    <?php endif; ?>

</div>

</body>
</html>

ファイル構成と設置方法

このサンプルでは、index.php を配置するだけで利用できます。変換後の画像を保存する uploads フォルダは、初回実行時に存在しない場合のみ自動で作成されます。すでに uploads フォルダが存在する場合は、そのまま保存先として使用されます。

sample/
└── index.php
(初回実行後に自動作成)

sample/
├── index.php
└── uploads/
  

index.php をサーバーへアップロードし、ブラウザからアクセスしてください。画像ファイルを選択し、変換後の形式(JPEG・PNG・GIF)を指定してアップロードすると、同じ階層に uploads フォルダが自動生成され、変換後の画像が元のファイル名のまま保存されます。


コメント