홍무 노트
홈페이지 언어 노트 PHP를 이용한 서버 내 이미지의 대량 압축
언어 노트 PHP

PHP를 이용한 서버 내 이미지의 대량 압축

PHP를 이용한 서버 내 이미지의 대량 압축

이 전체 문장을 직접 복사하여 실행하세요.

cat > /www/wwwroot/blog2.1.4s5.cn/compress.php << 'EOF'
<?php
/**
 * WebP 图片批量压缩脚本
 */

// ---- 加大内存 ----
ini_set('memory_limit', '512M');
set_time_limit(0);

$dir     = '/www/wwwroot/blog2.1.4s5.cn/wp-content/uploads/titlepic';
$backup  = '/www/wwwroot/blog2.1.4s5.cn/wp-content/uploads/titlepic_bak';
$quality = 80;
$maxW    = 1000;

if (!function_exists('imagecreatefromwebp')) {
    die("❌ 当前 PHP 没有 WebP 支持\n");
}

if (!is_dir($dir)) die("❌ 目录不存在:$dir\n");

// ---- 备份 ----
if (!is_dir($backup)) {
    echo " 备份原图到 $backup ...\n";
    exec("cp -r " . escapeshellarg($dir) . " " . escapeshellarg($backup));
    echo "✅ 备份完成\n\n";
}

$files = glob($dir . '/*.webp');
$total = count($files);

echo " 开始压缩(质量 " . $quality . ",最大宽度 " . $maxW . "px),共 " . $total . " 张\n\n";

$ok = 0;
$skip = 0;
$before = 0;
$after = 0;

foreach ($files as $i => $file) {
    $size1 = filesize($file);
    $before += $size1;

    $img = @imagecreatefromwebp($file);
    if (!$img) {
        $skip++;
        $after += $size1;
        continue;
    }

    $w = imagesx($img);
    $h = imagesy($img);

    // 缩放
    if ($w > $maxW) {
        $newW = $maxW;
        $newH = (int)round($h * ($maxW / $w));
        $newImg = imagecreatetruecolor($newW, $newH);
        imagealphablending($newImg, false);
        imagesavealpha($newImg, true);
        imagecopyresampled($newImg, $img, 0, 0, 0, 0, $newW, $newH, $w, $h);
        imagedestroy($img);
        $img = $newImg;
    }

    // 保存
    $tmpFile = $file . '.tmp';
    $saved = imagewebp($img, $tmpFile, $quality);
    imagedestroy($img);

    if (!$saved || !file_exists($tmpFile)) {
        $skip++;
        $after += $size1;
        @unlink($tmpFile);
        continue;
    }

    $size2 = filesize($tmpFile);

    if ($size2 < $size1) {
        rename($tmpFile, $file);
        $ok++;
        $after += $size2;

        if ($ok % 20 === 0) {
            echo "  已压缩 " . $ok . " 张...\n";
        }
    } else {
        @unlink($tmpFile);
        $skip++;
        $after += $size1;
    }

    // 强制释放
    gc_collect_cycles();
}

echo "\n";
echo "============================================\n";
echo "✅ 处理完成\n";
echo "============================================\n";
echo "总计:    " . $total . " 张\n";
echo "已压缩:  " . $ok . " 张\n";
echo "跳过:    " . $skip . " 张\n";
echo "\n";
echo "压缩前:  " . round($before / 1024 / 1024, 1) . " MB\n";
echo "压缩后:  " . round($after / 1024 / 1024, 1) . " MB\n";

if ($before > $after) {
    $saved = $before - $after;
    $pct = round($saved * 100 / $before, 1);
    echo "节省:    " . round($saved / 1024 / 1024, 1) . " MB(约 " . $pct . "%)\n";
}

echo "\n 原图备份:" . $backup . "\n";
echo " 满意后可删:rm -rf " . $backup . "\n";
EOF

php /www/wwwroot/blog2.1.4s5.cn/compress.php

예상 출력값

 开始压缩(质量 80,最大宽度 1000px),共 202 张

  已压缩 20 张...
  已压缩 40 张...
  ...

============================================
✅ 处理完成
============================================
总计:    202 张
已压缩:  202 张
跳过:    0 张

压缩前:  111 MB
压缩后:  12 MB
节省:    99 MB(约 89%)

단일 페이지 효과 확인

ls -lh /www/wwwroot/blog2.1.4s5.cn/wp-content/uploads/titlepic/166.webp
微信赞赏

위챗

支付宝赞赏

알리페이

✍️ 저자: 홍무

웹사이트 관리자 · 읽으셔서 감사합니다. 더 많은 흥미로운 콘텐츠를 확인하시려면 계속 방문해 주세요.

저자 프로필 홈페이지 보기 →

관련 기사

PHP `ob` 함수 기록

PHP `ob` 함수 기록 언어 노트 PHP

다음 3개의 함수(ob_get_contents(), ob_end_clean(), ob_start())를 사용하여 로컬 파일에 대한 버퍼링을 구현하거나 로컬 스크립트 코드를 실행할 수 있습니다. ob_start() 함수를 사용하여 출력 코드를 버퍼에 저장하면 페이지가 즉시 표시되지 않습니다. 이후 ob_get_contents() 함수를 사용하여 버퍼에 저장된 데이터를 가져옵니다.
👁 153
PHP preg

PHP preg 언어 노트 PHP

`preg_match_all` 함수는 전역 정규식 매칭을 수행하는 데 사용됩니다. `preg_match_all()` 함수의 구문은 다음과 같습니다: `int preg_match_all( string $pattern , string $subject [, array &$matches [, int $flags = PREG…] );`
👁 173
PHP 삼중 연산자와 `if` 문에 대한 자세한 설명

PHP 삼중 연산자와 `if` 문에 대한 자세한 설명 언어 노트 PHP

삼원 연산자 문법: ? 결과1 : 결과2. 설명: 물음표 앞의 부분은 조건을 나타내며, 해당 조건이 충족되면 결과1이, 그렇지 않으면 결과2가 됩니다. 본 문서에서는 삼원 연산자와 `if...else...` 문을 비교하여 상세히 설명합니다. 이 정보가 도움이 되길 바랍니다. 오늘 논문 작성 중 온라인 환경에서 다음과 같은 문장을 이해하지 못하는 상황을 겪었습니다: `$if_summary = $row['IF_SUMMARY'] = ...`
👁 198
PHP의 강제 형식 변환

PHP의 강제 형식 변환 언어 노트 PHP PHP 수집 PHP와 MySQL

데이터 유형 확인: 1. 특정 표현식의 값과 유형을 확인하려면 `var_dump()` 함수를 사용하세요. 2. 디버깅을 위해 이해하기 쉬운 형태의 유형 표현을 얻고 싶을 때는 `gettype()` 함수를 사용하세요. 3. 특정 유형을 확인하려면 `gettype()` 대신 `is_type()` 함수를 사용하세요. 문자열을 숫자로 변환: 문자열이 숫자로 평가될 때는 다음 규칙에 따라 결과가 결정됩니다…
👁 239
PHP에서 특정 문자열이 문자열에 포함되어 있는지 확인하는 다양한 방법

PHP에서 특정 문자열이 문자열에 포함되어 있는지 확인하는 다양한 방법 언어 노트 PHP

`str strstr()` 함수는 한 문자열이 다른 문자열 내에서 처음으로 나타나는 위치를 검색합니다. 이 함수는 매칭된 위치부터 시작하여 문자열의 나머지 부분을 반환합니다. 검색 대상 문자열을 찾을 수 없을 경우 `false`를 반환합니다. 코드는 다음과 같습니다: `<?php $email = 'user@example.com'; $domain = strstr($email, ...`
👁 144
PHP를 사용하여 웹페이지의 소스 코드를 가져오기(웹페이지에 접속하여 그 소스 코드를 반환)

PHP를 사용하여 웹페이지의 소스 코드를 가져오기(웹페이지에 접속하여 그 소스 코드를 반환) 언어 노트 PHP

다음은 PHP를 사용하여 웹페이지의 내용을 가져오는 일반적인 방법들입니다. 1. `file_get_contents` PHP 코드: 코드는 다음과 같습니다: > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > &gt
👁 225

추천 읽을거리

PHP를 사용하여 정규 표현식을 사용하지 않고도 지정된 두 문자 사이의 내용을 제거합니다.

PHP를 사용하여 정규 표현식을 사용하지 않고도 지정된 두 문자 사이의 내용을 제거합니다. 언어 노트 PHP

이 함수는 문자열 내에서 지정된 괄호 안의 내용을 제거하는 데 사용되는 PHP 함수입니다. 이 함수는 세 개의 매개변수를 받습니다: `$text` – 처리 대상 문자열; `$leftBracket` – 괄호의 왼쪽 경계 문자; `$rightBracket` – 괄호의 오른쪽 경계 문자. 함수의 동작 원리는 다음과 같습니다. 먼저 `strpos()` 함수를 사용하여 문자열 `$text` 내에서 첫 번째 `$leftBracket` 문자를 찾아냅니다…
👁 147
(자체 적응형 모바일 버전) 반응형 엘리베이터 및 승강기용 PBootCMS 템플릿 – 엘리베이터 제조업체용 친환경 기업 웹사이트 소스 코드 다운로드 (0461)

(자체 적응형 모바일 버전) 반응형 엘리베이터 및 승강기용 PBootCMS 템플릿 – 엘리베이터 제조업체용 친환경 기업 웹사이트 소스 코드 다운로드 (0461) 실용적인 저장하기 pbootcms 템플릿

이 자동 적응형 모바일용 우산용 막 구조 공사용 템플릿과 차량용 우산용 맞춤형 PbootCMS 웹사이트 템플릿입니다. 현대적이고 전문적인 디자인 스타일로, 막 구조 제품 및 우산·차량용 우산 공사 사례를 효과적으로 소개하는 데 적합합니다. 이를 통해 막 구조 관련 기업이 디자인 및 시공 역량을 온라인으로 효과적으로 홍보할 수 있으며, 상업용 및 공공 부문 고객을 유치하는 데 도움이 됩니다. 템플릿 소개 및 설치 안내: 웹사이트 백엔드: /admin.php, 사용자 이름: admin, 비밀번호: admin, 압축 해제 비밀번호: www.4s5.…
👁 35
(PC+WAP) 파란색 철구조 기계 부품 관련 웹사이트용 pbootCMS 템플릿 – 마케팅 중심의 공사 및 기반시설 관련 웹사이트 소스 코드 다운로드 (0544)

(PC+WAP) 파란색 철구조 기계 부품 관련 웹사이트용 pbootCMS 템플릿 – 마케팅 중심의 공사 및 기반시설 관련 웹사이트 소스 코드 다운로드 (0544) 실용적인 저장하기 pbootcms 템플릿

철구조물, 기계 부품 및 공사·건설 산업에 적합한 PbootCMS 블루 템플릿으로, PC 및 WAP 기기 모두에서 사용 가능합니다. 디자인 스타일은 단단하고 견고하여 철구조물 공사 및 부품 제품을 효과적으로 소개할 수 있습니다. 이 템플릿은 공사 현장 또는 철구조물 관련 기업이 브랜드 역량과 공사 성과를 온라인으로 효과적으로 소개할 수 있는 고품질의 솔루션입니다. 템플릿 전시 및 설치 안내: 웹사이트 백엔드: /admin.php, 사용자 이름: admin, 비밀번호: admin – 압축 해제…
👁 55