워드프레스 블로그 포스팅의 발전
워드프레스 블로그 포스팅은 지난 10년 동안 많은 발전을 이루었습니다.
클립보드로 이미지 복사 붙여넣기의 혁신
무려 클립보드로 이미지를 복사하여 붙여넣기가 가능해졌습니다. 이는 웹 표준의 발전 덕분입니다.
이미지 포맷 문제와 영세한 서버 환경
하지만 이미지를 붙여넣을 때 무조건적으로 image/png
형식으로 저장되는 것은 파일 크기가 커지는 문제를 일으킵니다. 특히 영세한 서버 환경에서는 이러한 부담이 클 수 있습니다.
해결책 탐색
이러한 문제를 해결하기 위해, image/png
를 image/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/