簡體   English   中英

如何在 iOS 中裁剪大圖像的中心部分?

[英]How to crop center part of large image in iOS?

當從中心裁剪圖像時,裁剪圖像將采用源圖像的縱橫比,但根據我的要求,縱橫比將隨着新的裁剪尺寸而變化。

我想獲得具有新縱橫比的圖像的確切中心部分。例如,大圖像的大小為 (320*480) 然后我想裁剪圖像的中心部分 (100,100) 並且縱橫比也將是 100*100 ,不需要外部的白色或黑色部分,圖像質量會很高。

裁剪功能:

- (UIImage *)cropImage:(UIImage*)image andFrame:(CGRect)rect {

    //Note : rec is nothing but the image frame which u want to crop exactly.

    rect = CGRectMake(rect.origin.x*image.scale,
                      rect.origin.y*image.scale,
                      rect.size.width*image.scale,
                      rect.size.height*image.scale);

    CGImageRef imageRef = CGImageCreateWithImageInRect([image CGImage], rect);
    UIImage *result = [UIImage imageWithCGImage:imageRef
                                          scale:image.scale
                                    orientation:image.imageOrientation];
    CGImageRelease(imageRef);
    return result;
}

請幫我。

這可能會運行

- (UIImage *)imageByCroppingImage:(UIImage *)image toSize:(CGSize)size
{
    // not equivalent to image.size (which depends on the imageOrientation)!
    double refWidth = CGImageGetWidth(image.CGImage);
    double refHeight = CGImageGetHeight(image.CGImage);

    double x = (refWidth - size.width) / 2.0;
    double y = (refHeight - size.height) / 2.0;

    CGRect cropRect = CGRectMake(x, y, size.height, size.width);
    CGImageRef imageRef = CGImageCreateWithImageInRect([image CGImage], cropRect);

    UIImage *cropped = [UIImage imageWithCGImage:imageRef scale:0.0 orientation:self.imageOrientation];
    CGImageRelease(imageRef);

    return cropped;
}

從圖像計算裁剪矩形

float imgHeight = 100.0f; //Any according to requirement
float imgWidth = 100.0f; //Any according to requirement
CGRect cropRect = CGRectMake((largeImage.size.width/2)-(imgWidth/2),largeImage.size.height/2)-(imgHeight/2),imgWidth,imgHeight);

現在裁剪它

CGImageRef imageRef = CGImageCreateWithImageInRect([largeImage CGImage], cropRect);
// or use the UIImage wherever you like
UIImage *croppedImg = [UIImage imageWithCGImage:imageRef]]; 
CGImageRelease(imageRef); 
var imageView = UIImageView()

// height and width values corresponds to rectangle height and width

imageView  = UIImageView(frame: CGRectMake(0, 0, width, height ))
imageView.image = UIImage(named: "Your Image Name")

// by   setting   content  mode  to  .ScaleAspectFill   image centrally  fill  in   imageView. image   might appear beyond  image frame.

imageView.contentMode = .ScaleAspectFill


// by   setting .clipsToBouds to true,  image set to image frame.

imageView.clipsToBounds = true
view.addSubview(imageView)

// 運行這段代碼

     -(UIImage *)croppedImage
    {
    UIImage *myImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    [self.bezierPath closePath];
    CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), 0.0, 0.0, 0.0, 0.0);
    _b_image = self.bg_imageview.image;
    CGSize imageSize = _b_image.size;
    CGRect imageRect = CGRectMake(0, 0, imageSize.width, imageSize.height);
    UIGraphicsBeginImageContextWithOptions(imageSize, NO, [[UIScreen mainScreen] scale]);
    [self.bezierPath addClip];
    [_b_image drawInRect:imageRect];

    UIImage *croppedImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
return croppedImage;

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM