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

Advertisements

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를 화면에 뿌려보니 빠르게 뜨는것을 볼 수 있었다.

계속 읽기

Xcode4, “code snippets” 기능으로 Doxygen 주석 쉽게 달기.


참고 : Easy Doxygen code snippets for Xcode 4

1. Xcode 에디터에 붙여넣기

다음을 Xcode 에디터에 붙여넣기 한다.

/**
<#description#>
@param <#parameter#>
@returns <#retval#>
@exception <#throws#>
*/

2. Xcode4 의 “Code Snippets Library” 찾기.

오른쪽 프로퍼티 부분 아래쪽에 “Code Snippets Library”가 있는데 두번째 탭 버튼이 “{}” 이다.

“{}” 탭은 콤보로 되있는데 “User” 를 선택하고,

3. Code Snippets 새로 생성하기.

Xcode에디터에서 1번에서 붙여넣기 했던 코드를 Drag & Drop 으로 User 영역에 가지고 온다.
그러면 새로운 Code Snippets 이 생긴다.

새로 생성되면 “Edit” 화면이 된다.

내가 입력한 예를적어보면,

Title : Method Comments
Platform : All
Completion Shortcut : doc
Completion Scopes : All

4. 수정 완료

“Done” 버튼을 누르면 수정이 끝난다.

언제든지 “Edit” 버튼을 눌러서 수정이 가능하다.

5. 자동완성 (Auto Completion)

이제 자동완성이 켜져 있으면,
dox[Enter] ( or dox[Tab]) 으로

위 화면을 볼 수 있다.

※ 자동완성이 잘 안되면,
Drag & Drop 으로 할 수 있다.

“Code Snippets” 을 Xcode 에디터의 붙이고 싶은 곳으로
Drag & Drop으로 Doxygen 주석을 추가 할 수도 있다.

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]

계속 읽기

iPod Touch 2G, iOS 4.2.1 메모리 확보. (Enable of Swap Memory.)


권하지 않음… daemon 내리고 원복했습니다.
수시로 멈추고 홈 + 전원으로 리셋도 잘 안되기도 하네요.

계속 읽기

애플 앱스 추천, 가로모드 날씨 시계 앱


탁상시계 모드 (알람 불필요.)

  • Weather+ Free : 가로모드 미지원
  • Weather Clock (Free) : 가로모드 미지원
  • BellWeather Alam (Free) : 광고 (눈에 거슬림)
  • Night Stand HD Lite : 날씨 정보 없음.
  • 네이버시계 : 날씨 정보 없음.
  • Nightstand : 가로모드, 광고없음, 날씨정보 <<<<= 선택

iPhone, xmppframework 컴파일 참고사항.


xmppframework URL : http://code.google.com/p/xmppframework/

필요 Framework
1. CoreLocation.framework
2. libresolv.dylib
3. CoreData.framework
4. SystemConfiguration.framework
5. CFNetwork.framework

추가 필요 Framework
1. facebook-ios-sdk ( http://developers.facebook.com/docs/guides/mobile/ )