die kurze Antwort auf Ihre Frage addClip
, aber Sie erwähnen, dass Sie ein Anfänger sind, also hier sind alle Schritte von A bis Z !!
Erstens, versuchen Sie diese Kategorie, sehen Sie, ob es hilft. (Wenn Sie nicht vertraut sind w/Kategorien haben eine Google oder fragen Sie einfach hier in einem Kommentar.)
-(UIImage *)doMask
{
UIImage *maskImage = [UIImage imageNamed:@"yourMask.png"];
CGImageRef maskRef = maskImage.CGImage;
CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(maskRef),
CGImageGetHeight(maskRef),
CGImageGetBitsPerComponent(maskRef),
CGImageGetBitsPerPixel(maskRef),
CGImageGetBytesPerRow(maskRef),
CGImageGetDataProvider(maskRef), NULL, false);
CGImageRef maskedImageRef = CGImageCreateWithMask([self CGImage], mask);
UIImage *maskedImage = [UIImage imageWithCGImage:maskedImageRef];
CGImageRelease(mask);
CGImageRelease(maskedImageRef);
return maskedImage;
}
schaffen nur (ich meine in Photoshop) eine PNG-Maske, und mit diesem Prozess vertraut machen.
Ich möchte Sie ermutigen, diesen Prozess zu meistern erste ...
Hier sind kritische Kategorien, die helfen ...
-(UIImage *)becomeSquare
{
CGSize imageSize = self.size;
CGFloat width = imageSize.width;
CGFloat height = imageSize.height;
UIImage *result = self;
if (width != height)
{
CGFloat newDimension = MIN(width, height);
CGFloat widthOffset = (width - newDimension)/2;
CGFloat heightOffset = (height - newDimension)/2;
UIGraphicsBeginImageContextWithOptions(
CGSizeMake(newDimension, newDimension), NO, 0.);
[result drawAtPoint:CGPointMake(-widthOffset, -heightOffset)
blendMode:kCGBlendModeCopy alpha:1. ];
result = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
}
return result;
}
und ein paar mehr ...
-(UIImage *)doScale
{
UIImage *result = self;
CGSize size = CGSizeMake(320,320);
UIGraphicsBeginImageContextWithOptions(size, NO, 0.0f);
[result drawInRect:CGRectMake(0.0f, 0.0f, size.width, size.height)];
result = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return result;
}
-(UIImage *)scaled640AnyShape
{
if (self.size.height < 5.0) return nil;
if (self.size.width < 5.0) return nil;
UIImage *result = self;
float widthShouldBe = 640.0;
float heightShouldBe = widthShouldBe * (self.size.height/self.size.width);
CGSize size = CGSizeMake(widthShouldBe ,heightShouldBe);
UIGraphicsBeginImageContextWithOptions(size, NO, 0.0f);
[result drawInRect:CGRectMake(0.0f, 0.0f, size.width, size.height)];
result = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return result;
}
(Ändern Sie natürlich die hartcodierten Ausgabegrößen wie gewünscht.)
Beachten Sie, dass Ihr endgültiges Ergebnis t, wird erreicht durch eine Kombination in der richtigen Reihenfolge, wie zum Beispiel:
yourImage = [yourImage doSquare];
yourImage = [yourImage doMask];
sobald Sie, dass die Arbeit hat ...
Dann ....
für BUCHSTäBLICH was Sie fragen, gibt es viele Beispiel-Codes über .. zB was https://stackoverflow.com/a/13870097/294884
Wie Sie Sie grundsätzlich sehen können, ...
UIGraphicsBeginImageContextWithOptions(...);
UIBezierPath * path = [UIBezierPath
bezierPathWithRoundedRect:imageRect cornerRadius:10.f];
[path addClip];
[yourImage drawInRect:imageRect];
... then ... UIGraphicsGetImageFromCurrentImageContext();
.. see the extensive code above for how to save it and so on.
Sie müssen nur mit den obigen Skalierungsbeispielen den Zoom vergrößern.
Auch dies beachten, wenn Sie den ... https://stackoverflow.com/a/17884863/294884
„Bereich abgeschnitten“ verändern
hier ist ein Beispiel für diese kritische Technik ...
-(UIImage *)squareAndSmall
{
// genius credits: https://stackoverflow.com/a/17884863/294884
CGSize finalsize = CGSizeMake(640,640);
CGFloat scale = MAX(
finalsize.width/self.size.width,
finalsize.height/self.size.height);
CGFloat width = self.size.width * scale;
CGFloat height = self.size.height * scale;
// for example, the central area....
CGRect imageRect = CGRectMake(
(finalsize.width - width)/2.0f,
(finalsize.height - height)/2.0f,
width, height);
// or, the top area... CGRect imageRect = CGRectMake(0, 0, width, height);
UIGraphicsBeginImageContextWithOptions(finalsize, NO, 0);
[self drawInRect:imageRect];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}
Hoffen, dass es alles hilft!
Was genau ist das Ziel? Sie können nicht mit einem kreisförmigen Bild enden, also möchten Sie nur das Bild unter dem Overlay auf Weiß abwischen? Und wie hängt das Zoomen mit dem Overlay zusammen? Kannst du schon alleine mit dem Zoomen umgehen? – Wain
Das UIImage-Objekt befindet sich oben auf einem Bildlauf mit einem Zoomskalenwert von 2,0. Wenn das Bild gezoomt ist und das Zuschneiden erwartet wird, sollte das gezoomte Bild innerhalb dieses Overlay-Freiraums abgeschnitten werden. – DesperateLearner
Yup, es ist sehr sehr schwer, den Zoom richtig zu bekommen. Ich habe dir den ganzen Code gegeben, den du unten brauchst! – Fattie