shinke1987.net
雑多な備忘録等のはず。
他のカテゴリ・タブ
目次
PR

複数の画像を一括で編集するスクリプト

2024-06-12 2024-06-13
カテゴリ: PHP

環境

OS:macOS 14.5

PHP:8.3.7 (brewを利用してインストール)(GDや–with-freetype等が有効化されている必要がある)

GoogleFonts等から使用可能なフォントをダウンロードし、
今回作成するスクリプトと同じフォルダへ配置する必要がある。

目的

使い方

下記コードを保存したフォルダで次のコマンドを実行する。

% 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);
}
同一カテゴリの記事