네이버지도로 만든 mbtiles 파일 크기 줄이기 #2 여행

이제 png32를 png8로 바꾸어보자.


먼저 pillow 라는 라이브러리를 설치해야한다.

  •  c:/python2.7/scripts/pip install pillow
이렇게 하면 필로우가 설치가 된다.

아래의 프로그램을 png8.py 로 저장했다면

  • python png8.py c:/map
c:/map에 png32파일이 있다.

import os,sys
from PIL import Image

# zoom dir > x dir > yfiles

def get_dirs(path):
return [name for name in os.listdir(path)
if os.path.isdir(os.path.join(path,name))]

def goto_folder(path,size=None):
nCount = 0
for zdirs in get_dirs(path):

zdir = os.path.join(path,zdirs)
for xdirs in get_dirs(zdir):

xdir = os.path.join(zdir,xdirs)
for yfiles in os.listdir(xdir):
nCount += 1
yfile = os.path.join(xdir,yfiles)
if os.path.getsize(yfile) > 2000:
print nCount,
makePng8(yfile)

def makePng8(file):
      try:
      im = Image.open(file)
    im.load()
    alpha = im.split()[-1]
    im = im.convert('RGB').convert('P',palette=Image.ADAPTIVE,colors=255)
    mask = Image.eval(alpha,lambda a: 255 if a <= 128 else 0)
    im.paste(255, mask)
    im.save(file,transparency=255)
      except:
          pass

def main(argv=None):
argv = sys.argv
if len(argv) != 2 :
print "usage: python png8.py folder"
sys.exit(1)

goto_folder(argv[1])

if __name__ == '__main__':
    sys.exit(main())


이만개정도 변환하는데 약 십분정도 걸린듯하다.

덧글

  • 2017/12/21 20:20 # 삭제 답글 비공개

    비공개 덧글입니다.
  • with_duke 2018/01/11 01:53 # 답글

    navermaps 폴더에 png8 타입의 파일이 섞여 있는듯합니다. png8 로 변한 파일에다 한번 더 파이썬 프로그램을 돌리니까 위와 유사한 에러가 뜹니다.
    파일수가 엄청 많을텐데 그걸 하나 하나 체크하는것도 힘든일이라..
    제가 프로그램을 약간 수정하겠습니다.
    png8을 만나면 에러가 발생할테고 그걸 그냥 패스하면 될테니까 try문으로 해당 함수를 감싸겠습니다...실험해보니까 에러메시지는 보내지만 죽지않고 계속 일을 하는군요.

댓글 입력 영역