J'essaye de redimensionner l'image JPEG en Objective-C (iOS). L'entrée est un fichier JPG et la sortie doit être UIImage
.Objective-C (iOS), Redimensionnement d'image en utilisant CIFilter produit une sortie invalide (UIImage)
Je possède ce code:
// Load image from a file
NSData *imageData = [NSData dataWithContentsOfFile:jpgFile];
UIImage *inputImage = [UIImage imageWithData:imageData];
CIImage *ciImage = inputImage.CIImage;
// Set Lanczos filter
CIFilter *scaleFilter = [CIFilter filterWithName:@"CILanczosScaleTransform"];
[scaleFilter setValue:ciImage forKey:@"inputImage"];
[scaleFilter setValue:[NSNumber numberWithFloat:0.5] forKey:@"inputScale"];
[scaleFilter setValue:[NSNumber numberWithFloat:1.0] forKey:@"inputAspectRatio"];
// Get an output
CIImage *finalImage = [scaleFilter valueForKey:@"outputImage"];
UIImage *outputImage = [[UIImage alloc] initWithCIImage:finalImage];
Mais l'image de sortie est invalide (outputImage.size.height is 0
), et il provoque des erreurs suivantes dans un autre traitement:
CGContextDrawImage: 0x0 contexte non valide. Si vous voulez voir le backtrace , veuillez définir la variable environnement CG_CONTEXT_SHOW_BACKTRACE . ImageIO: JPEG vide image JPEG (DNL non pris en charge)
Mise à jour:
Je ne sais pas, ce qui est mal avec le code ci-dessus (à l'exception de l'initialisation mentionnée par Sulthan ci-dessous - merci lui pour ça). Je le code suivant à la fin (ce code fonctionne OK):
CIImage *input_ciimage = [[CIImage alloc] initWithImage:inputImage];
CIImage *output_ciimage =
[[CIFilter filterWithName:@"CILanczosScaleTransform" keysAndValues:
kCIInputImageKey, input_ciimage,
kCIInputScaleKey, [NSNumber numberWithFloat:0.5],
nil] outputImage];
CIContext *context = [CIContext contextWithOptions:nil];
CGImageRef output_cgimage = [context createCGImage:output_ciimage fromRect:[output_ciimage extent]];
UIImage *output_uiimage = [UIImage imageWithCGImage:output_cgimage];
CGImageRelease(output_cgimage);
Il a changé un peu. il traite une image (l'erreur est toujours là - sans la partie JPEG), mais l'image est noire ou remplie de bruit de couleur, outputImage.size.height les variables de largeur sont des nombres de non-sens (valeurs grandes ou négatives). Quelque chose d'autre qui peut être faux avec ça? – Jolinar
@Jolinar Ma conjecture est que votre image originale n'est pas chargée correctement. Avez-vous vérifié la taille de 'inputImage'? – Sulthan
Oui, l'image originale a un vrai WxH et est traitée correctement (il y a quelques corrections de couleur, et une exportation JPEG), si le redimensionnement n'est pas effectué. – Jolinar