2012-03-19 17 views
8

PNG dosyalarını çalışma zamanında sıkıştırmam gerekir, ancak bunu yapabilen iOS hazır kütüphaneleri bulamıyorum. JPEG benim için çok uygun değil çünkü PNG'nin sağladığı Alpha kanalına ihtiyacım var, ve JPEG yapmıyor. Benim iOS projemde kullanabileceğim bir şeye dönüşen PNG'nin ezilmesi, benim için önemli olan bilgi/bilgi setinin ötesindedir.iOS'ta çalışma zamanı PNG sıkıştırması için kitaplık

Sadece fazla açık olmak gerekirse, bunu çalışma zamanında yapmam gerekir. zaman.

+0

Bu size yardımcı olabileceğini düşünüyorum. http://stackoverflow.com/questions/4394491/how-to-compress-resize-image-on-iphone-os-sdk-before-uploading-to-a-server –

+0

Daha önce hangi formattadır onu kaydetmek istiyor musun? Ve ana iş parçasından kurtulmayı önemsiyor musun? – Tommy

+0

@Malek Teşekkürler, ancak bu öğe görüntüyü yeniden boyutlandırmaya odaklıyor, sıkıştırmıyor .. –

cevap

3

ImageIO deneyin.

// 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]; 

Ve yeni resim daha ince olup olmadığını o zaman bakın: Eğer gerçekten başka bir yol varsa belki daha ince bir png dosyasını kaydetmek şekilde içinde UIImagePNGRepresentation kullanabilirsiniz ImageIO Programming Guide

+0

İşaret ettiğin için teşekkürler Görüntü G/Ç çıkışı - diğer projeler için yararlı olabilir.Bu proje için PNG'nin görüntü formatının bir parçası olarak doğal olarak desteklediği bir şey olmayan PNG dosyalarını sıkıştırmak istiyorum. I/O belgelerinde, PNG Sözlük Anahtarlarının hiçbirinin sıkıştırma üzerinde denetim sağlamadığını görebilirsiniz (http://developer.apple.com/library/ios/#documentation/graphicsimaging/Reference/CGImageProperties_Reference/Reference/reference.html#//apple_ref/doc/uid/TP40005103) - eğer yaptıysa, UIImagePNGRepresentation bunun için bir arabirim sağlayacaktır. –

+1

@RobReuss Bunun hakkında biraz kafam karıştı; PNG'ler sıkıştırıldı ama PNG'yi kodlamanın birçok yolu var. pngcrush ve onun benzerleri, alternatifleri tartmak için çok daha fazla zaman harcayarak, genellikle daha iyi bir sıkıştırma elde edebilirler.İstediğiniz şey, bir yo yerine daha iyi bir sıkıştırma oranı bulmak için daha fazla zaman harcayabileceğiniz bir kodlayıcıdır. varsayılan zamanını/verimlilik ticaretini kullanmak için güvenmek zorunda mısın? – Tommy

+1

Üzgünüm, belirsiz olsaydım. Haklısınız - PNG'nin sıkıştırması var - ancak iOS, kullanılan sıkıştırma derecesini kontrol etmenizi sağlayan bir parametre göstermiyor. Aradığım şey, UIImagePNGRepresentation tarafından üretildiğinden daha fazla sıkıştırılmış bir PNG üretip UIImage almamı sağlayacak bir proje oluşturabileceğim bir kütüphanedir. Pngcrush'ı çalışma zamanında kullanmanın bir yolu olsaydı, bu benim ihtiyacımı karşılardı. –

1

bakınız. Bu yöntem bir mac üzerinde çalışır: sadece PNG dosyalarını açmak ve bunları başka bir PNG dosyasına aktarmak, boyutunu azaltabilir.

+0

Sanırım bölüm 13.2'yi yanlış anlamış olabilirsiniz. Bu dışlamanın amacı, tek amacın akü boşalması veya ısı üretimi olduğu reddetme uygulamalarını haklı çıkarmaktır - inanın ya da inanmayın, insanlar bu tür bir şeyi sunarlar. Cihazın CPU'sunu, harika bir kullanıcı deneyimi ile sonuçlanırsa kalplerin zevkine utandırmamalısınız - bu özellikle cihazın temel işlevini koruma konusunda daha az endişe duyduğu iPad'de geçerlidir (iPhone'un ihtiyaç duyduğu gibi) arama yapmak). –

+0

Bu, PNG'yi yeniden kaydetme hakkında ilginç bir fikir olsa da - sadece bir yan etkisi olduğu için beni aradığım sıkıştırma seviyesini sağlayacağından şüphe duyuyorum, ama merak ettim ve test edeceğim. –

+0

Bu bölümle ilgili bu hassaslık için teşekkürler, belki ben bir şeyleri yakalamadım çünkü iki dilli değilim. En azından, bu tür işe yaramaz uygulamaları yapan insanlar hakkında düşünmedim ... Neyse cevabın bu bölümünü kaldırdım. Lütfen testiniz hakkında bize bilgi verin. – dulgan