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 フォルダが自動生成され、変換後の画像が元のファイル名のまま保存されます。
コメント