2017-08-22 6 views
2

In System Foto-Bibliothek, öffnen Sie meine Aktionserweiterung, weil Bild zu groß ist, Erweiterung abgestürzt, wie kann ich ein kleineres Bild bekommen?iOS Aktion Erweiterung wie ein kleines Bild

Ich versuche, diesen folgenden Code zu verwenden, aber es funktioniert nicht.

NSDictionary * dict [email protected]{NSItemProviderPreferredImageSizeKey:[NSValue valueWithCGSize:CGSizeMake(300, 300)]}; 
[itemProvider loadItemForTypeIdentifier:(NSString *)kUTTypeImage options:dict completionHandler:^(UIImage *image, NSError *error) { 

}]; 
+0

Check Bildgröße, nachdem es die Auswahl und wenn erforderlich reduzieren, um die Größe, so dass es Ihnen heraus, in obigem Fall helfen, wenn Sie dies zu erraten ist die Frage –

+0

es ist beim Laden des Bildes abgestürzt, es gibt keine Chance, es zu reduzieren. es muss also ein kleineres Bild beim Laden bekommen ... – Tolecen

Antwort

0

Bevor Sie das Bild auf imageView laden. Ändern Sie zuerst die Größe. Laden Sie dann das geänderte Bild in imageView.

UIImage *img = [UIImage imageWithData:selectedImgdata]; 
selectedImage = [self resizeImage:img]; 

Resize Bilddaten:

-(UIImage *)resizeImage :(UIImage *)theImage 
{ 
    if((theImage.size.width > 1024 && theImage.size.height > 768) || (theImage.size.width > 768 && theImage.size.height > 1024) || (theImage.size.width > 1024 && theImage.size.height < 768) || (theImage.size.height > 1024 && theImage.size.width < 768)) 
    { 
     float newHeight,newWidth,oldWidth,oldHeight,scaleFactor; 

     if(theImage.size.width > theImage.size.height) 
     { 
      oldWidth = theImage.size.width; 
      scaleFactor = 1024/oldWidth; 

      newHeight = theImage.size.height * scaleFactor; 
      newWidth = oldWidth * scaleFactor; 
     } 
     else 
     { 
      oldHeight = theImage.size.height; 
      scaleFactor = 1024/oldHeight; 

      newWidth = theImage.size.width * scaleFactor; 
      newHeight = oldHeight * scaleFactor; 
     } 

     UIGraphicsBeginImageContextWithOptions(CGSizeMake(newWidth, newHeight), NO, 1.0); 
     [theImage drawInRect:CGRectMake(0, 0, newWidth, newHeight)]; 
     UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); 
     UIGraphicsEndImageContext(); 
     return newImage; 
    } 
    return theImage; 
} 
+2

Es wird eine Speicherüberladung vor dem Laden des Bildes auftreten, also sollte eine Methode sein, ein kleineres Bild vor dem Beginn der Aktionserweiterung zu laden. – Tolecen

Verwandte Themen