iOSDev, zsh을 이용한 pngquant 스크립트.


zsh 의 기능 중 “**/*.png” 를 응용해서 recursive 하게 하위 디렉토리까지 pngquant 를
적용할 수 있게 만듬.

옵션은 각자에 맞게 수정이 필요.
“-s1 –quality 100” 는 적용 시간은 오래 걸리지만 최상 image quality 를 위한 옵션임.

pngquant -s1 --quality 100 **/*.png --ext .png --force

참고 URL :
http://stackoverflow.com/questions/9647920/recursively-batch-process-files-with-pngquant/9649214#9649214

Emacs, Terminus + 나눔고딕코딩 글꼴 설정


emulator002

$HOME/.emacs.el
(defun xftp (&optional frame)
"Return t if FRAME support XFT font backend."
(let ((xft-supported))
(mapc (lambda (x) (if (eq x 'xft) (setq xft-supported t)))
(frame-parameter frame 'font-backend))
xft-supported))

(when (xftp)
(let ((fontset "fontset-default"))
;; (set-default-font "Terminus 10")
;; (set-face-font 'default "Terminus 10")
(set-default-font "Terminus")
(set-face-font 'default "Terminus")
;; (set-fontset-font fontset 'latin
;; '("NanumGothicCoding" . "unicode-bmp"))
(set-fontset-font fontset 'hangul
'("NanumGothicCoding" . "unicode-bmp"))
(set-face-attribute 'default nil
:font fontset
:height 120)
))

Emacs, background color



;; ================================================================================
;; 기본 색 지정
;; ================================================================================
(set-foreground-color "wheat")
(set-background-color "DarkSlateGray")

2013-06-21 AM 12.40.20

RGB Color :

#2F4F4F

iOSDev, ImageOptim, 이미지 최적화, 앱 속도 크기 향상.


“iOSdev, PNG 최적화 스크립트.( pngcrush + advpngidat )” https://lum7671.wordpress.com/2011/11/16/iosdev-png-%EC%B5%9C%EC%A0%81%ED%99%94-%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-pngcrush-advpngidat/
글에 이여서 2탄으로 ImageOptim 앱에 대한 사용법이다.

1. 설치

http://imageoptim.com 에서 ImageOptim.app 을 다운 받고 /Applications 에 Drag & Drop 으로 설치를 한다.

2. 사용법

맥에서 앱을 실행하면 아래와 같은 윈도우 창이 뜬다.
이미지 파일을 Drag & Drop 으로 올려 놓으면 동작을 하며
자동으로 처리 이미지는 최적화된 새 이미지로 바꿔지게 된다.

또는

open -a ImageOptim.app *.png

와 같이 터미널에서 편리하게 실행 할 수도 있다.

3. 스크립트


#!/usr/bin/env bash
# -*- coding: utf-8 -*-
#
# 작성자 : 장두현
# 버 전 : 1.1
# 작성일 : 2012-03-08
# 수정일 : 2012-08-21
#
# * 맥 GUI용 : ImageOptim ( http://imageoptim.com/ )
#
# 사용법 :
# ./run_imageoptim.sh
# - 현재 디렉토리 이하 디렉토리 안의 모든 png 를 변환한다.
#
# 참고 : https://github.com/scribd/Xcode-OptimizePNG
#

cust_echo() {
echo -e "$1 $2"
}

APP_IMAGEOPTIM="/Applications/ImageOptim.app"

if [ ! -d "$APP_IMAGEOPTIM" ];then
cust_echo "요구사항체크:" "\nImageOptim.app 이 /Applications 디렉토리에 없습니다.\nImageOptim ( http://imageoptim.com/ ) 에서 어플리케이션을 받아서 설치하세요."
exit 0
fi

process_png()
{
cd $1
open -a ImageOptim.app *.png
}

DIR_PWD=$(pwd)

for directory in $(find $DIR_PWD -type d -print)
do
process_png $directory
done

4. 스크립트 사용법

이하 디렉토리에 있는 모든 png 파일을 ImageOptim.app 으로 최적화 한다.

예) Resource/Images/ 디렉토리 안의 png 파일을 최적화 하려면,
cd Resource
./run_imageoptim.sh

하면 된다.

※ 스크립트는 참고 용 임. 좀 더 다듬으면 거나 자신의 환경에 맞게 고치시길… 🙂

추가 Apple Developer 관련 링크 :
https://developer.apple.com/library/ios/qa/qa1681/_index.html#//apple_ref/doc/uid/DTS40009883

$ xcrun -sdk iphoneos pngcrush \
-revert-iphone-optimizations -q Local.png Local-standard.png

iOSDev, UIImage, 이미지 자르기에서 고려할 점. (Crop images)


이 글을 쓰게 된 이유를 적어 본다.

경우는 2가지가 있는데…

100개의 이모티콘을 프로그램에 적용할 시

경우1)
100개의 png 파일을 만들 수 있다.

경우2)
또는 1개 큰 타일 png(10×10)를 만들 수 있다.
(경우2의 적용과 더블어 XML 파서를 없앤 것으로 2초 가까이 성능향상이 있었다.)

여기서 문제점만 얘기를 하면,

경우1) 100개의 png

100개의 이미지는 file open을 100번 해야 한다. 이모티콘이 많아지면 더 문제로 느끼게 될 것이다.

경우2) 1개의 png

1개의 압축된 png 파일에서 100개의 이미지를 조각조각을 가지고 와서 화면에 뿌려줘야 한다.
이때 내가 profiling 하면서 체험 한 것은 CPU도 최대로 먹고, 시간이 오래 걸린다.
이유는 명확하지 못하나
우선 inflate(반대는 deflate) 에서 많은 시간을 잡아먹으므로 압축과 관련 있어 보인다.
압축풀기 혹은 이미지 색 인덱스, 파레트(palette)에서 많은 시간을 잡아 먹는 듯 싶다.

예를들어 파레트를 추측해 보면,
1개의 이미지파일에서 다양한 색의 인덱스 부분을 메타정보에 가지고 있을 것 같다.
이것을 이용해서 조각난 부분의 색을 표현하고 하는데 시간이 오래걸리는 것이다.
증상은 이모티콘 입력창이 느리게 뜬다. 미리 이미지를 조각내서 메모리에 들고 있었어도
결국 화면에 보여지는 부분에서 내부적으로 많은 일을 하다가 이모티콘 창이 늦게 뜬다.

결론,

우선 해결 하고 이글을 쓰게 되었는데…
해결은 큰 이미지를 우선 inflate을 먼저 한다.
방법은 아래 링크에 설명이 되있다.

출처 : Does CGContextDrawImage decompress PNG on the fly?

CGImageRef Inflate(CGImageRef compressedImage)
{
size_t width = CGImageGetWidth(compressedImage);
size_t height = CGImageGetHeight(compressedImage);

CGContextRef context = CGBitmapContextCreate(
NULL,
width,
height,
CGImageGetBitsPerComponent(compressedImage),
CGImageGetBytesPerRow(compressedImage),
CGImageGetColorSpace(compressedImage),
CGImageGetBitmapInfo(compressedImage)
);

CGContextDrawImage(context, CGRectMake(0, 0, width, height), compressedImage);
CGImageRef result = CGBitmapContextCreateImage(context);
CFRelease(context);
return result;
}

1) 큰이미지 inflate 시간

큰 이미지를 inflate 하는 시간은 그리 오래 걸리지 않았다.

2) 100개의 UIImage 화면에 뿌리는 시간 (이모티콘 입력창 보이는 시간)

이후 이미지를 100개 쪼개서 UIImage 에 넣어 두고
나중에 이 UIImage를 화면에 뿌려보니 빠르게 뜨는것을 볼 수 있었다.

계속 읽기

iOSdev, PNG 최적화 스크립트.( pngcrush + advpngidat )


1. 참고 링크

2. pngcrush, advpngidat 사용법

  • pngcrush (extreme)

    $ pngcrush -fix -iphone -brute hello_world.png ./Resources/hello_world.png
  • advpngidat

    $ advpngidat -z4f Resources/hello_world.png

3. 스크립트
Xcode-OptimizePNG 를 참고해서 만든 PNG를 Extreme 최적화 시키는 스크립트입니다.

  • 최적화 스크립트 : optpng.sh
    ※ 참고 : 첨부파일 확장자 제한으로 확장자 odt를 붙임.
  • 사용법 :

    ~/bin $ ./optpng.sh
    Usage :
    ./optpng.sh [*.png|filename.png]

계속 읽기

GIMP, 2.7.3 version screenshots


I have compiled with my Linux box, Kubuntu 11.04 🙂