Скрипт для перезаписи всех изображений определенной ширины в другой размер? - PullRequest
1 голос
/ 04 июля 2011

Я использую библиотеку GD с PHP.

По сути, я внес изменение в дизайн и мне нужно изменить размер целой группы изображений определенной ширины.

т.е. что угодноширина 876px должна быть 828px.

Есть ли способ перебрать все JPG-файлы в каталоге, проверить их ширину, и, если они равны X, затем захватить существующее имя файла, масштабировать доодно имя?

Ответы [ 2 ]

1 голос
/ 04 июля 2011

Просто нужно использовать imagecopyresampled() в цикле.

$path = "/my/path/to/jpgs";
$targetWidth = 876;
$newWidth = 828;
$imageQuality = 95;

if (is_dir($path)) {
    $dHandle = opendir($path);
    if ($dHandle) {
        while (($cFileName = readdir($dHandle)) !== false) {
            if (!preg_match("/\.jpg$/", $cFileName)) {
                continue;
            }

            $cImagePath = $path . $cFileName;
            list ($cWidth, $cHeight) = getimagesize($cImagePath);

            if ($cWidth == $targetWidth) {
                $cImage = imagecreatefromjpeg($cImagePath);
                if ($cImage === false) {
                    echo "Error reading: " . $cImagePath . "\n";
                    continue;
                }

                $cNewHeight = round($cHeight * ($newWidth / $cWidth));

                $cNewImage = imagecreatetruecolor($newWidth, $cNewHeight);
                imagecopyresampled($cNewImage, $cImage, 0, 0, 0, 0, $newWidth, $cNewHeight, $cWidth, $cHeight);

                if (imagejpeg($cNewImage, $cImagePath, $imageQuality) === false) {
                    echo "Error writing: " . $cImagePath . "\n";
                    continue;
                }
            }
        }

        closedir($dHandle);
    }
}
1 голос
/ 04 июля 2011

Существует множество сценариев изменения размера изображений ... просто Google ... но если вы хотите что-то создать самостоятельно, вы в основном будете использовать getimagesize и imagecopyresampled

...