2015-08-11 4 views
5

Ich fand eine ähnliche Frage hier: iOS 8 (Swift) How do I get rid of this error: ImageIO: PNG zlib error? jedoch gibt es einige Unterschiede.Photos.framework wirft <Error>: ImageIO: PNG zlib Fehler aber immer noch UIImage

Ich bekomme die PHAsset von einem Picker - wo das Bild ordnungsgemäß heruntergeladen und angezeigt wird (Es verwendet die PHCachingImageManager Klasse).

Aber, wenn ich versuche, das Bild zu beantragen später aus der Asset etwa so:

[[PHImageManager defaultManager] requestImageForAsset:asset targetSize:AssetTargetSize 
    contentMode:PHImageContentModeAspectFit options:nil 
    resultHandler:^(UIImage * _Nullable result, NSDictionary * _Nullable info) { 
     if (result) 
      _image = result; 
} 

der result Variable ein Zeiger auf ein UIImage Objekt ist aber nicht gültig ist - ich es nicht in NSData verwandeln kann noch Ich blicke schnell durch xcode.

Im Protokoll bekomme ich nur die folgende Nachricht: <Error>: ImageIO: PNG zlib error und nichts mehr.

Ich versuchte, die Anfrage synchron zu machen, wie in der verknüpften Frage vorgeschlagen, aber es machte keinen Unterschied.

Das Bild, auf das die PHAsset zeigt, kann sowohl in der Foto-App als auch im Foto-Picker angezeigt werden.

+0

"Ich habe versucht, die Anfrage synchron zu machen, wie vorgeschlagen ..." Können Sie Ihre aktualisierten Code zur Verfügung stellen, bitte? Es würde auch helfen, in der Lage zu sehen, wie Sie AssetTargetSize setzen ... – jperl

+1

@KickimusButticus Da es nicht funktioniert habe ich meinen Code zurück zu dem, was geschrieben wird (ich würde lieber asynchron), aber es wurde durch die Erstellung der Optionsklasse und ändert nur die synchrone Eigenschaft zu "YES". 'AssetTargetSize' ist eine statische Konstante vom Typ' CGSize', die vorerst fest codiert ist. Dieser Code funktioniert die meiste Zeit, aber ich bekomme diesen Fehler ohne zusätzliche Informationen für einige Bilder - aber da das Bild in den Bilderwähler geladen wird - bezweifle ich, dass dies ein Problem mit meinen Bildern ist –

+0

mein ganzes quadratisches Bild durch die Kamera .app bekomme den gleichen Fehler – qiz

Antwort

0

Wir müssen die synchrone Option aktivieren.

PHAsset *asset = array[i]; 
      PHImageRequestOptions *options = [[PHImageRequestOptions alloc] init]; 
      options.synchronous = YES; 
      PHImageManager *imageManager = [PHImageManager defaultManager]; 
      [imageManager requestImageForAsset:asset targetSize:CGSizeMake(200, 200) contentMode:PHImageContentModeAspectFit options:options resultHandler:^(UIImage * _Nullable result, NSDictionary * _Nullable info) { 
       badge = (UIImage *)result; 
      }]; 
0

Ich löste dies, indem ich die oben erwähnten synchronen Optionen auf true einstellte und die Größe extern auf den Aufruf von requestImageForAsset einstellte. Beide wurden für mich benötigt, damit es funktioniert. In Swift 2. x:

let aSize = CGFloat(200) // it's really a constant elsewhere in the project 
    let targetSize = CGSizeMake(aSize, aSize) 
    let options = PHImageRequestOptions() 
    options.synchronous = true 

    PHImageManager.defaultManager().requestImageForAsset(asset, targetSize: targetSize, contentMode: .AspectFit, options: options, resultHandler: { (image, info) -> Void in 
     guard let imageFor = image else { return } 
     // use (now-unwrapped) imageFor here 
    }) 
Verwandte Themen