2009-07-19 13 views
12

UITableView uygulamasında çok büyük boyutlu resimler gösteriyorum, çünkü bu benim app bir süre sonra çöküyor. Şimdi görüntüyü yeniden boyutlandırmak ve diske kaydetmek istiyorum. Biri NSData/UIImage'dan görüntüyü yeniden boyutlandırmama ve diske kaydetmekten tasarruf etmeme yardımcı olabilir.Resim UIImage uygulamasından sandbox'a kaydet

UIImage nesnesinden görüntüyü yeniden boyutlandırmak için gereken kodu aldım. Sonuç olarak, UIImage nesnesindeki resmim yeniden boyutlandırıldı, iphone sanal alanına nasıl kaydedilir.

sayesinde

cevap

4

Haklısınız 'nasıl bir dosyayı yazarım' soruyorsun?

Sanırım Kütüphane/Caches dizinine yazmak istediğinizde bir komplikasyon var, bu yüzden telefon yedeklendiğinde bu dosyaları kaydetmeyin.

Uygulama klasörünün kökünü w/NSHomeDirectory() ile alın ve sonra Kitaplık/Önbellek ekleyin.

NSData'da fs w/a yöntemine bir NSData yazabilirsiniz. Bir UIImage'iniz varsa, veri almak için UIImageJPEGRepresentation() veya UIImagePNGRepresentation'u yapabilirsiniz.

+6

Muhtemelen NSArray * yolları = NSSearchPathForDirectoriesInDomains (NSCachesDirectory, NSUserDomainMask, EVET) kullanmak istiyorum; NSString * cachesDirectory = [paths objectAtIndex: 0]; 'Kitaplık/Önbellekleri' kendiniz eklemek yerine. –

1

NSData *imgData = UIImageJPEGRepresentation(image, 1);

CGImageSourceRef source = CGImageSourceCreateWithData((CFMutableDataRef)imgData, NULL); 
NSDictionary *metadata = [(NSDictionary *) CGImageSourceCopyPropertiesAtIndex(source,0,NULL)autorelease]; 
NSString *jpgPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/Test.jpg"]; 
[imageMutableData writeToFile:jpgPath atomically:YES]; 

O adıyla Test.jpg ile sanal alanındaki belgeler klasörüne resminizi kopyalar.

Eğer burada UIImagePNGRepresentation(image);

30

deneyebilirsiniz PNG için bunu yapmak istiyorsanız, çalışan kod dan iOS'da Belgeler dizinine kaydetmek için koddur.

// Convert UIImage to JPEG 
NSData *imgData = UIImageJPEGRepresentation(image, 1); // 1 is compression quality 

// Identify the home directory and file name  
NSString *jpgPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/Test.jpg"]; 

// Write the file. Choose YES atomically to enforce an all or none write. Use the NO flag if partially written files are okay which can occur in cases of corruption 
[imgData writeToFile:jpgPath atomically:YES]; 
+0

Harika cevap, bana yardımcı oldu. Bu verilere tekrar erişmek basit mi (bir kod satırı)? Ya da yığınla ilgili başka bir soru sormalı mıyım? – KKendall

+1

@KKendall [NSData dataWithContentsOfFile:] 'veya' [UIImage imageWithContentsOfFile:] '' – Liron

+1

JPEG, kayıp bir biçimdir, bu yüzden UIImagePNGRepresentation kullanılmasını öneririm. Görüntüyü diske/diske tekrar tekrar yazarsanız/okuduğunuzda kalite sorunlarınız olur. – user1021430