blog.stackframe.dev

[PHP] 이미지 메타데이터 제거하기

카메라로 사진을 찍으면 EXIF 포맷으로 찍은 시간, 기기 모델명, 위치, 조리개 값 등 여러 정보가 사진 안에 포함된다. 그래서 개인정보 보호를 위해 이러한 정보를 모두 제거하는 기능이 필요한 경우가 생긴다.

PHP에서 영상처리용 확장모듈은 GD, Gmagick, Imagick가 있다. GD는 그리는 쪽에 좀 더 특화되어 있기 때문에 여기서는 사용하지 않을 것이다. Gmagick과 Imagick는 각각 GraphicsMagick와 ImageMagick의 PHP 확장이다. GraphicsMagick는 ImageMagick로부터 포크되어서 API 변경없이 빠르고 안정성을 추구하는 쪽으로 개발된다. Gmagick와 Imagick는 뿌리가 같고 사용할 API는 아주 단순하기 때문에 둘 다 호환되므로 뭘 설치해도 상관없다. 다만 Gmagick는 아직도 베타버전을 벗어나지 못하고 있지만 Imagick는 안정버전이면서 대부분의 배포판에서 제공되고 있으므로 이걸 사용하는게 낫다.

코드는 간단하다. 그냥 이미지를 불러와서 메타데이터들을 제거하고 저장하면 된다:

try
{
    $img = new Imagick($filePath);
    $img->stripImage();
    $img->writeImage($newFilePath);
    $img->clear();
}
catch(ImagickException $e)
{
    return NULL;
}

Gmagick를 사용한다면 위의 코드에서 ImagickImagickException 클래스를 Gmagick, GmagickException으로 변경하면 된다.

Imagick 실행 중에 문제가 생기면 ImagickException 예외가 던져지므로 try catch로 받아서 적절하게 처리해야 한다.

댓글