2012-03-19 3 views
8

런타임에 PNG 파일을 압축 할 수 있어야하지만 그렇게 할 수있는 iOS 준비가 된 라이브러리를 찾을 수 없습니다. PNG가 제공하는 알파 채널이 필요하고 JPEG는 필요하지 않기 때문에 JPEG는 저에게 적합하지 않습니다. 내 iOS 프로젝트에서 사용할 수있는 무언가로 PNG를 무언가로 바꾸는 것은 아마도 C와 관련하여 필자의 기술이나 지식을 뛰어 넘는 것일 수 있습니다.iOS에서 런타임 PNG 압축을위한 라이브러리

그냥 명확하게하기 위해 런타임시 컴파일 타임이 필요합니다. 시각.

+0

나는 이것이 당신을 도울 수 있다고 생각합니다. http://stackoverflow.com/questions/4394491/how-to-compress-resize-image-on-iphone-os-sdk-before-uploading-to-a-server –

+0

이전의 데이터 형식은 무엇입니까? 당신은 그것을 저장하고 싶습니까? 그리고 당신은 주 스레드에서 내려 걱정합니까? – Tommy

+0

@Malek 감사합니다.하지만 그 항목은 압축하지 않고 이미지의 크기를 조정하는 데 중점을 둡니다. –

답변

3

는 ImageIO에서보십시오.

// load image from the one you created 
UIImage *image = [UIImage imageNamed:@"your image name"]; 
// give it a new PNG representation from the API 
NSData *pngImage = UIImagePNGRepresentation(image); 
//save it to another place 
NSError *error = nil; 
[pngImage writeToFile:@"your path" options:NSDataWritingAtomic error:&error]; 

을 그리고 새 이미지가 얇거나없는 경우 다음을 참조 : 당신이 정말 다른 방법이없는 경우, 아마 당신이 얇은 PNG 파일을 저장하는 방식으로 UIImagePNGRepresentation을 사용할 수 있습니다 ImageIO Programming Guide

+0

이미지 입출력을 가리켜 주셔서 감사합니다 - 다른 프로젝트에 유용 할 수도 있습니다.이 프로젝트에서는 이미지 형식의 일부로 PNG가 기본적으로 지원하는 것이 아닌 PNG 파일을 압축하려고합니다. I/O 문서를 보면 PNG 사전 키가 압축을 제어 할 수 없음을 알 수 있습니다 (http://developer.apple.com/library/ios/#documentation/graphicsimaging/Reference/CGImageProperties_Reference/Reference/reference.html#//apple_ref/doc/uid/TP40005103) - 만약 그렇다면 UIImagePNGRepresentation이 인터페이스를 제공 할 것입니다. –

+1

@RobReuss PNG는 압축되어 있지만 PNG 인코딩 방법은 여러 가지가 있습니다. pngcrush와 그 비슷한 것들은 대체로 훨씬 더 많은 시간을 소비하여 대안을 평가할 때 종종 더 나은 압축을 얻을 수 있습니다. 그래서 원하는 것은 하나의 요보다 더 나은 압축 비율을 찾는 데 더 많은 시간을 소비 할 수있는 엔코더입니다 u는 기본 시간/효율 트레이드 오프를 사용하기 위해 신뢰해야합니다. – Tommy

+1

내가 불분명하면 죄송합니다. 맞습니다. PNG에는 압축 기능이 있지만 iOS는 사용되는 압축 정도를 제어 할 수있는 매개 변수를 제공하지 않습니다. 내가 찾고있는 것은 내가 UIImage를 가져올 수있게 해주고 UIImagePNGRepresentation에 의해 생성 된 것보다 더 압축 된 PNG를 만들 수있는 프로젝트로 만들 수있는 라이브러리이다. 런타임에 pngcrush를 사용할 수있는 방법이 있다면, 필자의 필요에 부응 할 것입니다. –

1

참조하십시오. 이 방법은 Mac에서 작동합니다. PNG 파일을 열고 다른 PNG 파일로 내보내기 만하면 크기가 줄어들 수 있습니다.

+0

제 13.2 절을 잘못 이해했다고 생각합니다. 그 배제의 목적은 배터리 드레인 또는 열 발생이라는 유일한 목적이있는 앱을 거부하는 것을 정당화하는 것입니다. 믿거 나 말거나 사람들은 그런 종류의 것을 제출합니다. 훌륭한 사용자 경험을하게되면 기기의 CPU를 마음껏 즐겁게 사용하면 안됩니다. 특히 iPad의 기본 기능을 보호하는 데 덜 신경을 쓰는 iPad에서 특히 그렇습니다 (예 : iPhone이 필요함). 전화 걸기). –

+0

PNG를 다시 저장하는 것에 대한 흥미로운 아이디어입니다. 부작용이기 때문에 찾고있는 압축 수준을 나에게 줄 것을 심각하게 의심합니다.하지만 호기심을 느끼고 테스트 할 것입니다. –

+0

이 섹션에 대한이 정밀도 덕분에, 어쩌면 내가 이중 언어가 아니기 때문에 나는 그 물건을 잡지 못했을 것입니다. 적어도 쓸모없는 Apps를 만드는 사람들에 대해서는 생각하지 않았습니다 ... 어쨌든이 부분을 삭제했습니다. 테스트에 대해 알려주십시오. – dulgan