워드프레스 포스팅 작성 용량 최대 80% 아끼는법

워드프레스 블로그 포스팅의 발전

워드프레스 블로그 포스팅은 지난 10년 동안 많은 발전을 이루었습니다.

클립보드로 이미지 복사 붙여넣기의 혁신

무려 클립보드로 이미지를 복사하여 붙여넣기가 가능해졌습니다. 이는 웹 표준의 발전 덕분입니다.

이미지 포맷 문제와 영세한 서버 환경

하지만 이미지를 붙여넣을 때 무조건적으로 image/png 형식으로 저장되는 것은 파일 크기가 커지는 문제를 일으킵니다. 특히 영세한 서버 환경에서는 이러한 부담이 클 수 있습니다.

해결책 탐색

이러한 문제를 해결하기 위해, image/pngimage/jpeg로 변환하는 웹페이지를 만들어보는 시도를 했습니다.

크롬 브라우저의 한계

하지만 크롬 브라우저는 이미지를 무조건적으로 image/png로 변환한다는 사실을 발견했습니다.

워드프레스의 PHP 활용

결국 브라우저의 한계로 인해 다른 해결책을 찾아야 했습니다. 여기서 워드프레스가 PHP 기반인 것이 큰 장점으로 작용했습니다.

functions.php 파일을 이용한 해결책

워드프레스의 테마에서 functions.php 파일을 변경함으로써, 파일 업로드 시점을 후킹할 수 있었습니다. 아래 함수를 functions.php 파일에 추가함으로써, 클립보드를 통해 붙여넣는 모든 이미지를 jpg로 변환할 수 있게 되었습니다.

add_filter('wp_handle_upload_prefilter', 'convert_pngs_to_jpgs');

function convert_pngs_to_jpgs($file) {
    $filename = $file['name'];
    $extension = pathinfo($filename, PATHINFO_EXTENSION);

    if (!in_array($extension, ['png'])) {
        return $file;
    }

    $image = imagecreatefrompng($file['tmp_name']);
    $bg = imagecreatetruecolor(imagesx($image), imagesy($image));
    imagefill($bg, 0, 0, imagecolorallocate($bg, 255, 255, 255));
    imagealphablending($bg, TRUE);
    imagecopy($bg, $image, 0, 0, 0, 0, imagesx($image), imagesy($image));
    imagedestroy($image);
    imagejpeg($bg, $file['tmp_name'], 100);
    imagedestroy($bg);

    $file['name'] = preg_replace('/\.[^.]+$/', '.jpg', $filename);
    return $file;
}   

functions.php 편집방법

출처 : https://wordpress.org/support/topic/copy-pasting-images-creates-png-images-not-jpg/

sofnet_1 아바타