環境
OS:macOS 14.5
PHP:8.3.7 (brewを利用してインストール)(GDや–with-freetype等が有効化されている必要がある)
GoogleFonts等から使用可能なフォントをダウンロードし、
今回作成するスクリプトと同じフォルダへ配置する必要がある。
目的
- jpegファイルをwebpに変換する。
- 解像度を下げることができる。(今回は横幅1000pxに変更し、縦幅は比率に応じて変更される)
- 指定した箇所に特定の文字列を表示させる。
- 返還前の画像が保存されたフォルダと、変換後の画像が保存されるフォルダを指定できる。
使い方
下記コードを保存したフォルダで次のコマンドを実行する。
% php ファイル名.php 変換前の画像が保存されたフォルダ 変換後の画像が保存されるフォルダ
コード
<?php
// 変換前の画像が保存されたフォルダのパス。
$inputDirPath = preg_replace('/\/$/', '', $argv[1]);
// 変換後の画像が保存されるフォルダのパス。
$outputDirPath = preg_replace('/\/$/', '', $argv[2]);
// 変換前と変換後の画像のパスを取得。
$inputFilePath = [];
$outputFilePath = [];
foreach (glob($inputDirPath.'/*.{JPG,jpg,JPEG,jpeg}', GLOB_BRACE) as $filePath) {
$inputFilePath[] = $filePath;
$outputFilePath[] = $outputDirPath.'/'.pathinfo($filePath, PATHINFO_FILENAME).'.webp';
}
// ファイル読み込み。
$images = [];
try {
foreach ($inputFilePath as $index => $path) {
$images[] = imagecreatefromjpeg($path);
if ($images[$index] === false) {
printf("Error in imagecreatefromjpeg\n");
return false;
}
}
} catch (Throwable $e) {
echo $e;
return false;
}
// 画像の編集。
$changedImages = [];
foreach ($images as $index => $image) {
// 横幅1000pxに設定。(縦幅は比率に応じて変更される)
$changedImages[] = imagescale($image, 1000);
// 文字色を設定。(黒)
$color = imagecolorallocatealpha($changedImages[$index], 0x00, 0x00, 0x00, 10);
// 文字列追加。
$isSuccessStr = imagefttext(
$changedImages[$index],
15,
0,
30,
30,
$color,
'./BIZUDGothic-Regular.ttf',
'あいうえお'
);
if (!$isSuccessStr) {
printf("Error in \$isSuccessStr\n");
return false;
}
}
// 画像の出力。
foreach ($changedImages as $index => $image) {
// 96dpi, クオリティ40 でファイル出力。
imagewebp($image, $outputFilePath[$index], 40);
imagedestroy($image);
}