색상 손실 없이 32MB의 PNG 파일을 200Kbs로 변환하는 방법

색상 손실 없이 32MB의 PNG 파일을 200Kbs로 변환하는 방법

크기가 32MB인 이미지 두 개가 있는데 색상에 영향을 주지 않고 크기를 32MB에서 100Kbs 또는 모든 KB로 변경하고 싶습니다.

내가 시도하는 명령은 다음과 같습니다

muhammad@muhammad-mohsin:~/scans$ find . -iname '*.png' -exec mogrify -format jpg "*.png" {} +


muhammad@muhammad-mohsin:~/$ find . -type f -iname \*.png -delete


muhammad@muhammad-mohsin:~/$ find . -iname '*.jpg' -exec mogrify -define jpeg:extent=300kb -strip -quality 90 -scale 90% *.jpg {} +

여기에서는 먼저 크기를 32Mbs에서 5.8Mbs로 줄이는 PNG를 JPG로 변환하고 모든 것이 동일하게 유지되지만 세 번째 명령을 사용하면 이미지의 배경색이 제거되어 회색조가 흐릿해집니다.

그러나 텍스트는 여전히 읽을 수 있지만 색상과 배경 로고는 읽을 수 없습니다.

변환, 수정 또는 기타 도구를 사용하여 이를 어떻게 달성할 수 있습니까? 나는 지금까지 가능한 모든 것을 시도했다.

원본 이미지의 일부입니다

명령 후 변경된 이미지의 일부입니다.

답변1

이는 JPEG 압축이 작동하는 방식 때문입니다. 서로 유사한 인접한 픽셀을 유사한 값으로 반올림하려고 시도합니다. 이로 인해 세부 정보가 손실되고 블록화가 발생합니다.

이는 압축 수준을 높이면 더욱 눈에 띄게 됩니다.정확히당신이 무엇을하고 있는지. 또한 이 작업은 두 단계로 수행됩니다.

  1. 무손실(PNG)에서 손실(JPEG)로 압축합니다.
  2. 손실 압축.

당신은 것입니다아마최종 품질에서 무손실에서 손실로 전환하여 더 나은 결과를 얻습니다. 따라서 손실 압축은 한 번만 적용합니다(예: jpeg:extent=300kb -strip -quality 90 -scale 90%첫 번째 변환에서 사용).

게다가 이미지의 크기와 세부 수준에 대해서도 아무 말도 하지 않습니다. 300kB까지 낮추고 원하는 품질을 유지하는 것은 불가능할 수 있습니다.

배경 얼룩을 제거하려면 일부 이미지 편집 소프트웨어에서 문서에 임계값을 적용하여 특정 회색 음영보다 작은 부분을 흰색으로 강제할 수 있습니다.

하지만 무엇을 하든 30MB 무손실 형식에서 300kB 손실 형식으로 압축하면~ 할 것이다눈에 띄게 품질이 저하됩니다.

답변2

노력하고 있지만 find . -iname '*.png' -exec convert -resize 60% -quality 60 "*.jpg" {} +작동하지 않습니다.

참조.https://superuser.com/questions/71028/batch-converting-png-to-jpg-in-linux

$ ls -1 *.png | xargs -n 1 bash -c 'convert -quality 60 "$0" "${0%.*}.jpg"'

내 예제 31MB.png를 1.4MB.jpg로 변환합니다. ... 예를 들어 반복해야 할 수도 있습니다 $ ls -1 *.PNG | ....

참조. @steeldriver의 댓글: "조금 더 나은 것은 xargs -d '\n' -n 1"

관련 정보