現在の言語: 日本語 |
Mac専用コマンド sips |
画像関連 |
outputResizeImage();
//画像リサイズ出力
function outputResizeImage()
{
$kind=0;
$input_dir = '../img/';
$output_dir = '../img/out/';
$imageSize = 300;
resizeImageMacOnly($kind, $input_dir, $output_dir, $imageSize);
}
function resizeImageMacOnly(int $kind, string $input_dir, string $output_dir, int $imageSize)
{
$files=[];
getImageDir($kind, $input_dir, $output_dir, $files);
if(count($files)==0)
{
echo "対象ファイルが存在しません。";
return;
}
// 保存先フォルダがなければ作成する
if (!is_dir($output_dir))
{
mkdir($output_dir, 0755, true);
}
$absPathOut="/Applications/MAMP/htdocs/img/";
convertImageSize($input_dir, $output_dir, $files, $imageSize, $absPathOut);
}
function convertImageSize(string $input_dir, string $output_dir, array &$files, int $imageSize, string $absPathOut)
{
// 出力先ディレクトリの絶対パスを確実に取得
$abs_out_base = realpath($output_dir);
foreach ($files as $file)
{
$in_file = $input_dir . $file;
$abs_input = realpath($in_file);
if (!$abs_input || !$abs_out_base)
{
echo "パスエラー: 入力または出力フォルダが見つかりません。\n";
continue;
}
// 出力先のフルパスを正しく結合(outフォルダの中のファイル名)
$abs_output = $abs_out_base . '/' . $file;
// コマンドの組み立て
// 注意:--out の後の半角スペースと変数 $abs_output を確実に含める
$command = "sips --setProperty format png --resampleWidth " . (int)$imageSize . " " . escapeshellarg($abs_input) . " --out " . escapeshellarg($abs_output);
echo "実行コマンド: " . htmlspecialchars($command) . "\n";
$exec_log = [];
$return_var = 0;
// 第2引数は配列、第3引数は変数
exec($command . " 2>&1", $exec_log, $return_var);
if ($return_var === 0)
{
echo "成功: $file\n";
}
else
{
echo "失敗 (コード: $return_var)\n";
echo "詳細情報: " . implode("<br>", $exec_log) . "\n";
}
}
}
function getImageDir(int $kind, string $input_dir, string $output_dir, array &$files)
{
$all_files = scandir($input_dir);
$files = [];
$flg=0;
foreach ($all_files as $file)
{
$flg=0;
if($kind==0)
{
// '/i' 修飾子をつけることで大文字小文字を区別せずに検索
if (preg_match('/\.png$/i', $file))
{
$flg=1;
}
}
else
{
//最も一般的な書き方(OR演算子)
// (jpg|jpeg) で「jpg」または「jpeg」にマッチ
//if (preg_match('/\.(jpg|jpeg)$/i', $file))
//短く書く方法(量指定子 ?)
// jpe?g で「jpg」と「jpeg」の両方にマッチ
if (preg_match('/\.jpe?g$/i', $file))
{
$flg=1;
}
}
if($flg==0)continue;
$files[] = $file;
}
}
outputResizeImage();
//Resize image output
function outputResizeImage()
{
$kind=0;
$input_dir = '../img/';
$output_dir = '../img/out/';
$imageSize = 300;
resizeImageMacOnly($kind, $input_dir, $output_dir, $imageSize);
}
function resizeImageMacOnly(int $kind, string $input_dir, string $output_dir, int $imageSize)
{
$files=[];
getImageDir($kind, $input_dir, $output_dir, $files);
if(count($files)==0)
{
echo "The target file does not exist.";
return;
}
//Create the destination folder if it does not exist.
if (!is_dir($output_dir))
{
mkdir($output_dir, 0755, true);
}
$absPathOut="/Applications/MAMP/htdocs/img/";
convertImageSize($input_dir, $output_dir, $files, $imageSize, $absPathOut);
}
function convertImageSize(string $input_dir, string $output_dir, array &$files, int $imageSize, string $absPathOut)
{
// Ensure absolute path of output directory is obtained.
$abs_out_base = realpath($output_dir);
foreach ($files as $file)
{
$in_file = $input_dir . $file;
$abs_input = realpath($in_file);
if (!$abs_input || !$abs_out_base)
{
echo "Path error: Input or output folder not found.\n";
continue;
}
// Correctly combine the full output path (filename in the out folder).
$abs_output = $abs_out_base . '/' . $file;
// Assembling the command
// Note: Be sure to include a space after --out and the variable $abs_output.
$command = "sips --setProperty format png --resampleWidth " . (int)$imageSize . " " . escapeshellarg($abs_input) . " --out " . escapeshellarg($abs_output);
echo "Command to execute: " . htmlspecialchars($command) . "\n";
$exec_log = [];
$return_var = 0;
// The second argument is an array, and the third argument is a variable.
exec($command . " 2>&1", $exec_log, $return_var);
if ($return_var === 0)
{
echo "Success: $file\n";
}
else
{
echo "Failed (Code: $return_var)\n";
echo "More information: " . implode("<br>", $exec_log) . "\n";
}
}
}
function getImageDir(int $kind, string $input_dir, string $output_dir, array &$files)
{
$all_files = scandir($input_dir);
$files = [];
$flg=0;
foreach ($all_files as $file)
{
$flg=0;
if($kind==0)
{
// Use the '/i' modifier to perform a case-insensitive search.
if (preg_match('/\.png$/i', $file))
{
$flg=1;
}
}
else
{
// Most common syntax (OR operator)
// (jpg|jpeg) matches "jpg" or "jpeg"
/if (preg_match('/\.(jpg|jpeg)$/i', $file))
// Shorter way (quantifier ?)
// jpe?g matches both "jpg" and "jpeg"
if (preg_match('/\.jpe?g$/i', $file))
{
$flg=1;
}
}
if($flg==0)continue;
$files[] = $file;
}
}
| 著作権情報 |
| ホームページおよびアプリ等に掲載されている情報等については、いかなる保障もいたしません。 ホームページおよびアプリ等を通じて入手したいかなる情報も複製、販売、出版または使用させたり、 または公開したりすることはできません。 当方は、ホームページおよびアプリ等を利用したいかなる理由によっての障害等が発生しても、 その結果ホームページおよびアプリ等を利用された本人または他の第三者が被った損害について 一切の責任を負わないものとします。 |