품질에 영향을주지 않고 JPEG 사진에 테두리를 추가하려면 어떻게해야합니까?


24

해상도가 4680x3120 인 JPEG 형식의 사진이 있습니다. 이 사진 주위에 흰색 테두리를 추가하여 5200x3467 사진으로 바꿉니다 (인쇄상의 이유로).

분명히, 나는 사진에서 아무것도 변경하거나 제거하지 않고 단순히 무언가를 추가하고 있습니다. 따라서 원칙적으로이 절차는 손실이 없을 수 있습니다. 그러나 Paint를 사용하여이 테두리를 추가하는 경우 Paint의 저장 프로세스는 사진을 JPEG 형식으로 다시 압축하여 정보와 품질을 잃게됩니다.

품질을 떨어 뜨리지 않고 사진의 원래 부분에 영향을 미치지 않고 테두리와 같은 JPEG 사진에 무언가를 추가하는 방법이 있습니까?

답변:


35

필립의 대답 이 최선의 방법 이지만 , JPEG 영역 내에서 원하는 모든 작업을 수행 할 수 있습니다.

JPEG는 이미지를 MCU ( Minimum Coding Units) 라고하는 블록 (일반적으로 각각 16x16)으로 나누고 별도로 압축하여 작동합니다. 압축 수준을 매우 높게 올리면 이미지에서이를 볼 수 있습니다. 보다 합리적인 압축 수준에서 블록이 매끄럽게 혼합되어 경계가 보이지 않습니다.

이 사실을 이용하여 이미지에 간단한 흰색 테두리를 무손실로 추가 할 수 있습니다. 출력 이미지 크기와 동일한 흰색 블록의 빈 배열을 만든 다음 원래 JPEG MCU 블록을 중간에 놓습니다 .¹

이 기술의 단점은 입력 및 출력 이미지 크기가 MCU 크기의 배수 인 경우에만 작동합니다. 그렇지 않은 경우에는 흰색 테두리와 원본 이미지 가장자리 사이의 여백에서 일부 블록을 다시 압축해야합니다. 지나치게 높은 JPEG 압축 수준에서 멀리 떨어져 있으면 출력에 이러한 차이가 나타나지 않으므로 여전히 효과적으로 손실이 없습니다.

나는 이것 만하는 프로그램을 모른다. 내가 아는 가장 가까운 것은 역 동작을하는 것입니다. jpegtran 은 이미지 가장자리의 일부를 손실없이 잘라내는 자르기 기능을 가지고 있습니다. 중간은 그대로.

내가 아는 가장 간단한 기성품 솔루션 은 Photoshop 용 Better JPEG Lossless Resave 플러그인입니다. Photoshop은 일반적으로 Photoshop과 마찬가지로 압축되지 않은 버전에서 MCU를 다시 만들지 않도록하기 위해 위에 제공된 아이디어를 기반으로 한 기술을 사용하여 원본 이미지에서 MCU를 복사합니다 .³


위반 :

  1. JPEG의 손실로 인해 출력에 색상 차이 가 발생하기 때문에 결과 테두리가 흰색 이 아닐 것이라고 생각할 수 있습니다 . 필자는 약간의 테스트를 수행했으며 Photoshop에서 웹용 JPEG 레벨 10 저장 (즉 "품질이 낮음")을 통해 저장된 순수한 흰색 이미지는 여전히 순전히 흰색 인 디코딩 된 이미지를 만듭니다.

    나는 두 가지 테스트로 이것을 결정했다.

    먼저 JPEG를 원본 위에 레이어로로드하고 최상위 레이어의 혼합 모드를 차이로 설정 한 다음 그 위에 레벨 조정 레이어를 추가하여 차이를 확대 해 보았습니다. 결과 이미지는 "차이가 없음"을 나타내는 검은 색으로 유지됩니다.

    둘째, 예상되는 차이를 보지 못하면 조정 레이어를 삭제하고 JPEG 레이어를 일반 블렌드 모드로 되돌리고 스포이드 도구를 집어 들고 RGB (255,255,255)로 표시되지 않은 픽셀을 이미지 전체에서 조사했습니다. )를 정보 패널에서 나는 하나를 찾지 못했습니다. 이미지를 문지르면 숫자가 약간 깜박 거릴 것으로 예상했지만 흔들리지 않았습니다.

    나는 이것이 인코딩 알고리즘의 퇴화 사례라고 결론을 내릴 수 있습니다. 순수한 흰색 블록은 이산 코사인 변환을 통해 흰색으로 유지 됩니다.

    흥미롭게도 순수한 검정색 블록 에서는 발생 하지 않습니다 . 최소한 Photoshop의 구현에서는 디코딩시 RGB (0,0,0)가 아니라 RGB (1,1,1)로 바뀝니다.

    결론적으로, 위의 기술을 사용하여 생성 된 이미지를 인쇄 할 때이 경계 영역의 스퍼터 도트에 대해 걱정할 필요가 없습니다.

  2. jpegtran는 명령 행 프로그램이지만 동일한 코드를 기반으로하는 GUI Windows 프로그램도 있습니다 jpegcrop.

  3. 아아,이 플러그인은 Windows 전용입니다.


1
이러한 기능을 제공하는 JPEG Wizard라는 프로그램을 사용했습니다. 또한 JPEG의 다른 부분에 다른 압축 비율을 적용하는 매우 훌륭한 기능을 가지고있었습니다. 따라서 사람의 머리와 손에 고품질 설정, 의복에 중간 품질, 배경에 대한 낮은 품질을 사용할 수 있으므로 모든 파일에 중간 품질을 사용했을 때보 다 파일 크기는 작지만 전반적인 품질이 향상 될 수 있습니다.
supercat

1
나는 그것을 시도 할 기회를 얻지 못했지만 이 블로그 게시물jpegtran의 자르기 기능을 실제로 확장하는 데 사용할 수 있다고 제안합니다 . (그러나 확장 테두리의 색상이 확실하지 않습니다.)
mattdm

4
@mattdm : 예 jpegtran. 이미지를 확장 할 수도 있지만 항상 하드 코딩 된 중간 회색 RGB (128,128,128)로 채워집니다. DCT 계수 공간에서는 간단한 bzero()호출로 수행 할 수 있기 때문에 유일한 옵션이기 때문에 간단하게 수행 할 수 있습니다 . 나는 이것을 바꾸는거친 해킹을 시도했지만 작동하지 않지만 관련된 추악함을 느낄 수 있어야합니다. 좌절에 손을 던져
워렌 영

@WarrenYoung : 패딩 블록의 색상을 변경하려면 첫 번째 (DC) 계수 만 변경하고 나머지는 0으로 유지해야합니다. 물론, 계수는 압축되어 있기 때문에 어쨌든 가능해야하지만, 그것이 보이는 것처럼 사소한 것이 아니라는 데 동의합니다.
Ilmari Karonen

2
마지막 요점은 고주파 정보를 버리는 것입니다. 단색 픽셀 블록의 색상에 대한 정밀도를 버림으로써 얻을 수있는 이득은 한두 바이트를 넘을 수 없으므로 결코 또는 거의 이루어지지 않습니다. 정보 손실이있는 경우 YUV-> RGB 색 공간 변환에 있습니다.
홉스

20

여기서 기억해야 할 점 은 손실 압축 형식으로 사진을 저장할 때 품질이 저하된다는 것 입니다. 너무 오래 당신 같은에서 사진 저장 무손실 국경을 추가 한 후 형식 (PSD, TIFF 등), 당신은 이미 첫 번째 장소에서 JPEG로 사진을 저장하여 잃은 것보다 더 이상 데이터가 손실되지 않습니다.


1
감사. 그리고 TIFF에 저장할 때 Paint와 같은 '크 래피'프로그램을 사용할 때에도 마찬가지입니다.
LBogaardt

4
적어도 빠른 테스트에 따르면 페인트는 TIFF를 저장할 때 무손실 LZW 압축 알고리즘을 사용 하므로 괜찮습니다.
Philip Kendall

5
이것은 이미지의 크기를 크게 증가시킬 수 있다는 점을 명심하십시오.
BlueRaja-Danny Pflughoeft

2
paint는 또한 손실없는 형식 인 PNG도 지원합니다
phuclv

jpeg로 다시 저장하는 것에 대한 답변으로 +1은 모든 jpeg 인코딩 옵션과 호환되지 않습니다.
James Snell

6

그것은 아니다 확실히 손실,하지만 당신은 사용 아주 가까이 얻을 수있는 GIMP (또는 유사한 기능을 다른 편집기) 다음과 같은 두 가지 트릭을 :

  1. 먼저 추가하려는 테두리의 너비가 8 픽셀 의 배수 (및 16 픽셀의 배수)인지 확인하십시오.

    JPEG 압축 알고리즘 은 이미지를 왼쪽 상단에서 시작 하여 8 × 8 픽셀 블록 *으로 나누고 손실 압축 알고리즘을 각 블록에 독립적으로 적용 하기 때문에 중요합니다 . 따라서 최소한 원칙적으로 기존 블록 주위에 8x8 픽셀 블록을 모두 추가하여 JPEG 이미지를 손실없이 채울 수 있습니다. 그러나 전체 블록 너비가 아닌 테두리를 추가하려고하면 채워진 이미지의 블록이 원본의 블록과 정렬되지 않고 일부 압축 손실이 불가피합니다.

    *) 실제로 대부분의 JPEG 이미지는 크로마 서브 샘플링을 사용 합니다. 즉, 이미지의 회색조 부분 만 실제로 8 × 8 블록으로 압축되는 반면, 크로마 채널은 압축 전에 50 % 축소되어 효과적인 블록 크기는 16 ×가됩니다 16 픽셀 따라서 최상의 결과를 얻으려면 테두리 너비가 실제로 16 픽셀의 배수 여야합니다. 그러나 크로마에서 약간의 압축 손실이 눈에 띄지 않기 때문에 일반적으로 8 (또는 24 또는 40 등) 픽셀 경계로 벗어날 수 있습니다.

  2. 트릭의 두 번째 부분은 최종 이미지를 저장할 때 이미지를 JPEG로 이미지 내보내기 대화 상자 (고급 설정 아래) 에서 "원본 이미지의 품질 설정 사용" 확인란을 선택하는 것 입니다. 일반적으로 사용하는 것보다 품질이 떨어질 것 같더라도이 작업을 수행하십시오!

    이 설정은 원본 이미지에 사용되었을 때와 동일한 압축 설정 재사용 GIMP하게 일반적으로 압축 손실의 약 99 %를 제거, 것을 제공 , 당신은 너무 크게 이미지를 편집하지 않은, 특히 그에서 블록 새 이미지는 여전히 원본 이미지와 정렬됩니다. (반올림 오류로 인해 여전히 일부 손실이 발생하지만 그렇지 않은 경우보다 훨씬 적습니다.)


빠른 시연을 위해 Wikimedia Commons에서이 JPEG 테스트 이미지를 가져 와서 원래 품질이 50으로 낮은 설정으로 저장했으며 위에서 설명한 방법을 사용하여 멋진 8px 흑백 테두리를 추가했습니다.

8px 테두리가있는 테스트 이미지, 주로 무손실

김프의 "곡물 추출"레이어 모드를 사용하여 표시 한 원본 (15.1 kB)과 편집 된 이미지 (16.7 kB)의 차이점은 다음과 같습니다.

패딩 된 이미지와 원본의 차이점

경계 너비가 16의 배수가 아니기 때문에 약간의 크로마 오류가 발생할 수 있으며, 반올림으로 인해 루마 채널에 약간의 손실이있는 몇 블록이 있습니다. 여전히, 시각적으로, 원본 이미지와 패딩 된 이미지는 2 배로 확대되고 이미지 사이에서 번갈아 가면서도 구분할 수 없습니다.

특히, JPEG 품질 당김의 결과 명암이 최대 다음 17.6 kB의 화상을 얻을 수 패딩 이미지를 저장하기 전에 50 내지 60 :

테두리가 8 픽셀 인 테스트 이미지, 품질이 50에서 60으로 증가

고배율에서는 편집 한 이미지가 원본보다 일부 위치에서 눈에 띄게 흐릿함을 확실히 알 수 있으며, 곡물 추출과의 차이를 확인하면 다음을 확인할 수 있습니다.

패딩 된 이미지 (q60에서)와 원본의 차이


"이 체크 박스를 선택해도"프로그레시브 "설정에 영향을 미치지 않는 것 같습니다." 점진적 인코딩은 품질 설정이 아니라 인코딩 설정이므로 버그가 아닙니다. Jpegtran은 이미지를 점진적으로 손실없이 변환 할 수 있습니다.
Damian Yerrick

@tepples : 당신이 맞아요; 그 단락을 제거했습니다. 어떤 이유로, 프로그레시브 모드를 전환하면 품질 설정이 일치하지 않을 것이라는 인상을 받았지만 빠른 테스트로 인해 내가 틀렸다는 것을 확인하는 것 같습니다.
Ilmari Karonen

1
@thomasrutter : 의견을 줄이실 수 없으므로이 기능을 설명하는 원래 포럼 게시물 , 특히이 인용문을 알려 드리겠습니다 . " 이미지를 약간만 변경 한 경우 다시 동일한 양자화 테이블을 사용하면 원본 이미지와 거의 동일한 품질과 파일 크기를 얻을 수 있습니다. 이렇게하면 다른 양자화 테이블을 사용한 경우와 비교하여 양자화 단계로 인한 손실이 최소화됩니다. "
Ilmari Karonen

1
비교 를 위해 다른 질문에 대한 답변 의 또 다른 예가 있습니다. 이론에 대한 나의 이해는 Ilmari와 동의하지만, 적어도 나의 예에서, 연습은 토마스가 말한 것 (적어도 고도로 저하 된 이미지로 시작할 때)에 훨씬 더 많은 것 같습니다. (돌에 대한 세부 사항의 상실이 사람의 피부에 비해 눈에 띄지 않기 때문에 묘비가이 목적에 대한 나쁜 예라고 생각합니다.)
mattdm

1
@ mattdm : 소프트웨어에 의존하는 것 같습니다. 김프에서 그 대답의 결과를 재현하려고 시도했는데 김프 (최소 v2.8.10)가 ImageMagick (테스트 한 버전)보다 JPEG 품질을 유지하는 데 약간 더 좋습니다. q75에 한 번 저장된 첫 번째 이미지의 PSNR은 34.0298이고 q75에 두 번 저장된 이미지는 32.8169 중 하나입니다 (8 번 다시 저장된 이미지의 PSNR은 32.6459 임). 이에 비해 q75에서 동일한 소스 이미지를 김프에 한 번 저장하면 PSNR이 36.4560이됩니다. 같은 품질로 열고 다시 저장하면 36.3295로 약간 떨어집니다.
Ilmari Karonen

3

이것이 정확히 원하는 것이 아니라면 미안하지만 ...

인쇄 할 때 이미지를 배치하기 위해 흰색 테두리를 추가하는 것처럼 들립니다. 인쇄 인터페이스를 올바르게 배우는 데 중점을 두지 말고 이런 해킹을 피하십시오. 또 다른 문제는 인쇄 프로그램이 올바른 DPI / 해상도에 맞게 4680x3120 이미지의 크기를 조정할 수 있다는 것입니다. 이것은 jpeg를 다시 저장하는 것보다 더 심각한 영향을 줄 수 있습니다.


둘 다 유효한 포인트입니다. 감사합니다. 그러나 온라인 인쇄소 중 하나에 사진을 업로드 했으므로 실제 프린터를 제어 할 수 없습니다.
LBogaardt

1

이전 답변은 매우 좋습니다.

jpg 형식의 "심리적 측면"을 추가하겠습니다.

jpg가 잘 준비되면 약 0.5 %의 정보 만 손실됩니다. 그것은 대부분의 경우 인간의 눈으로 볼 수없는 것입니다. 분석을 수행하고 차이점을 확인하려면 프로그램이 필요합니다 (Ilmari가 수행 한 분석과 같은).

"좋은 품질"은 파일 형식이 이미지를 저장하는 방법뿐만 아니라 프로세스입니다. 그렇습니다 . 실제로 필요 했기 때문에 jpg로 파일을 다시 한 번 압축 했습니다. 통제 된 상황이라면 그렇게해도 괜찮습니다.

당신은 정말 당신이 당신이 매우 구체적인 저장 또는 소프트웨어 요구 사항, 또는 아주 꽉 워크 플로우를 가지고, 또 다른 무손실 포맷을 사용할 수 있음을 의미했습니다.

실제로 품질이 염려된다면 페인트를 사용하지 않았을 것입니다. JPG 형식에는 그림판에서 전혀 제어 할 수없는 구성이 있습니다.

다음은 jpg 압축을 실제로 제어 할 수있는 무료 프로그램 목록과 선택해야 할 옵션입니다. (jpg 저장 대화 상자에서 모두)

Irfanview-크로마 색상 서브 샘플링 비활성화를 켭니다.

FastStone Image Viewer-컬러 서브 샘플링 : 없음

김프-서브 샘플링 4 : 4 : 4

결론. 페인트를 사용하지 마십시오.

내가 아직 확인하지 않은 것. 이러한 프로그램이 모두 포함 된 색상 프로파일을 유지하는 경우 나중에 게시물을 편집하겠습니다.


이 답변에 누군가 -1 투표했습니다. 일반적으로 나는 바보 같은 말을 할 수 있다는 것을 알고 있기 때문에 상관하지 않습니다. 이 특정한 경우에, 대답의 어떤 부분이 잘못 되었습니까?
Rafael

나는 투표 (위 또는 아래)하지 않았다,하지만 당신은 수있는 더 좋은 첫 인상을주고 철자와 문법 작업 할 (그리고, 정직, 읽기 당신의 대답은 쉽게하기 위해). 또한이 질문에는 이미 몇 가지 대답이 있습니다 (특히 광산은 꽤 길었습니다). 어떤 시점에서, 어떤 사람들은 기존 답변에 새로운 것을 명확하게 추가 하지 않는 답변을 하향 투표하거나 적어도 상향 투표하지 않을 수 있습니다. 또한 중요한 부분이 한 눈에 보이도록 답을 구성하십시오. 이 경우 굵게 강조 표시된 유일한 부분 은 중요하지 않은 각주입니다.
Ilmari Karonen

귀하의 의견에 감사드립니다. 나는 모국어가 아니기 때문에 영어로 생각하는 데 어려움을 겪고 있습니다. 철자 도구를 찾겠습니다. 문법이 있는지 잘 모르겠습니다. -의견의 두 번째 부분에서 StackExchange의 논리는 질문의 순서가 변경되거나 편집 될 수 있기 때문에 답변의 흐름이 고정되어 있지 않기 때문에 독립적으로 질문에 대답하는 것임을 이해합니다. 나는 그것에 대해 살펴볼 것입니다. (굵은 글씨를 제거했습니다) 다시 한 번 감사드립니다. : o)
Rafael

1
"약 0.5 % 정보 만 잃음"[인용 필요] :)
Warren Young

Warren, 여기 있습니다 : otake.com.mx/Apuntes/PruebasDeCompresion2/… 스페인어로되어 있습니다. 지금 Google Translate를 사용하십시오. 업데이트해야합니다. 실제로 그것은 0.392 % 미만입니다 :)
Rafael

0

IrfanView 는 이미지 세트에 적합합니다. 방법에 대한 참고 사항 은 다음과 같습니다.

다음은 테두리 삽입을위한 저장 프로 시저입니다. 테두리를 추가하는 Infran 프로 시저

  1. 오른쪽 클릭 이미지, '연결 프로그램'-> 'InfranView'
  2. 'b'를 누르십시오
  3. 왼쪽 상단에서 '고급 옵션 사용'을 선택하고 '고급'을 누르십시오
  4. '캔버스 크기'를 확인하고 '설정'을 누릅니다.
  5. 각 테두리 너비를 입력하십시오 (왼쪽, 오른쪽, 위쪽, 아래쪽)
  6. '확인'을 누르십시오
  7. '기존 파일 덮어 쓰기'를 선택하십시오.
  8. '확인'을 누르십시오
  9. 출력 디렉토리 '결과 파일의 출력 디렉토리'를 입력하십시오.
  10. 상단 목록에서 테두리를 추가 할 이미지를 탐색하고 두 번 클릭하십시오. 하단 목록의 '입력 파일 :'목록에 추가됩니다.
  11. '배치 시작'을 누르십시오

1
이 방법이 이미지의 품질을 낮추지 않는 포스터의 요구 사항을 충족하도록 해당 방법의 특별한 점을 설명해 주시겠습니까? 처음 읽을 때 포스터가 피하려고하는 전체 압축 해제-재 압축주기를 통해 JPEG를 보내는 것처럼 보입니다.
Philip Kendall

흠, 여기에 나열된 프로세스를 통해 이미지 수명주기와 관련하여 흥미로운 점을 제시합니다. 내 게시물을 삭제하거나 수정하려면 다음 사항을 알려주십시오. :)!
J-Dizzle
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.