HEICをJPG画像に変換するオンラインサービスをHTMLとPHPを使って作成してみます。
HEIC(ヘイク)とは?
HEIC(High Efficiency Image Format)は、高効率な画像フォーマットの一種です。High Efficiency Image Formatの頭文字を取って「ヘイク」「ヒーク」などと呼ばれています。
Appleが開発し、iOS 11以降およびmacOS High Sierra以降でサポートされています。HEICは、写真やイメージの圧縮を効率的に行うための技術を提供します。
HEICは、一般的なJPEGと比較して一般的に高品質な画像を提供しますが、一部のアプリケーションやプラットフォームではまだ完全にサポートされていない場合もあります。そのため、HEICファイルを他のフォーマットに変換する必要がある場合もあります。
例えば、ワードプレスの場合、一応HEIC画像はアップロードできますが、ファイルを開くことができません。力ずくで開くと破損しているような状態になります。
そこで、HEICをJPG画像に変換するサービスを作って変換できるようにしてみます。
ImageMagickのインストール方法
HEICファイルをJPGに変換してダウンロードするために、PHPを使用する方法を以下に示します。
この例では、ImageMagickモジュールを使用して画像の変換を行います。また、ファイルのアップロードとダウンロードも含めて説明します。
まず、ImageMagickをサーバーにインストールしておく必要があります。多くのLinuxディストリビューションでは、以下のようなコマンドでインストールできます。
sudo apt-get install imagemagick
Imagick(拡張モジュール)について
WordPressの場合は、ImageMagickのPHP拡張モジュールであるImagickを使用して、HEICファイルをJPGに変換することが可能です。
Imagickは、ImageMagickライブラリの機能をPHPから利用できるようにするものであり、画像の変換や操作を行うのに便利なツールです。
※サーバー側の問題でImagickが使用できない場合もあります。
ファイルのアップロードと変換について
以下は、ファイルのアップロードとHEICからJPGへの変換を行うPHPスクリプトの例です。
HTML:
<!DOCTYPE html>
<html>
<head>
<title>HEIC to JPG Converter</title>
</head>
<body>
<form method="post" enctype="multipart/form-data">
<input type="file" name="file" accept=".heic">
<input type="submit" value="変換してダウンロード">
</form>
</body>
</html>
以下は、Imagickを使用してHEICファイルをJPGに変換するPHPのサンプルコードです。
PHP:
[rml_read_more]
if ($_SERVER["REQUEST_METHOD"] == "POST" && isset($_FILES["file"])) {
$targetDir = "wp-content/uploads/";
$targetFile = $targetDir . basename($_FILES["file"]["name"]);
$imageFileType = strtolower(pathinfo($targetFile, PATHINFO_EXTENSION));
echo "Target File: " . $targetFile . "<br>"; // デバッグ用:ターゲットファイルのパスを表示
if ($imageFileType == "heic") {
if (move_uploaded_file($_FILES["file"]["tmp_name"], $targetFile)) {
echo "File moved successfully.<br>"; // デバッグ用:ファイルの移動が成功したことを表示
$outputFile = $targetDir . pathinfo($targetFile, PATHINFO_FILENAME) . ".jpg";
echo "Output File: " . $outputFile . "<br>"; // デバッグ用:出力ファイルのパスを表示
$imagick = new Imagick($targetFile);
$imagick->setImageFormat("jpg");
if ($imagick->writeImage($outputFile)) {
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=\"" . basename($outputFile) . "\"");
readfile($outputFile);
unlink($outputFile);
if (file_exists($outputFile)) {
unlink($outputFile);
}
} else {
echo "変換に失敗しました。<br>";
}
} else {
echo "ファイルのアップロードに失敗しました。<br>";
}
} else {
echo "HEICファイルをアップロードしてください。<br>";
}
}
このスクリプトでは、uploads/
ディレクトリにファイルをアップロードし、ImageMagickのconvert
コマンドを使用してHEICファイルをJPGに変換します。
変換後、ダウンロード用のヘッダーを設定し、JPGファイルをダウンロードします。ダウンロードが完了したら、一時的に生成されたHEICファイルを削除します。
※アップロードされた画像を削除しないとサーバーに画像が残ってしまいますので削除されるようにしておきましょう。
まとめ
このコードは、ユーザーがファイル選択でHEICファイルを変換してJPEGにダウンロードできるようにするものです。
注意: セキュリティ上の理由から、実際のプロダクション環境では、より厳格なファイルのバリデーションとエスケープ処理が必要です。また、この例はサーバーサイドでのファイル操作とコマンド実行を含むため、セキュリティに十分注意して実装してください。