Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/102.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在iPhone中按比例剪裁图像?_Iphone_Ios_Graphics_Scale - Fatal编程技术网

如何在iPhone中按比例剪裁图像?

如何在iPhone中按比例剪裁图像?,iphone,ios,graphics,scale,Iphone,Ios,Graphics,Scale,我有一张大尺寸的图片(2048*2048px),这张图片在iPhone屏幕上显示为320*320。我想这样做: 在我的应用程序中,用户可以打开大尺寸图像(例如2048*2048),图像在iPhone屏幕上显示为320*320,并且图像上方有矩形,用户可以将矩形移动到iPhone屏幕上图像内的任何位置,例如矩形(100、100、300、200),然后我想按比例在矩形区域内剪裁原始尺寸的图像 我试过很多方法 UIImageView *originalImageView = [[UIImage Vie

我有一张大尺寸的图片(2048*2048px),这张图片在iPhone屏幕上显示为320*320。我想这样做:

在我的应用程序中,用户可以打开大尺寸图像(例如2048*2048),图像在iPhone屏幕上显示为320*320,并且图像上方有矩形,用户可以将矩形移动到iPhone屏幕上图像内的任何位置,例如矩形(100、100、300、200),然后我想按比例在矩形区域内剪裁原始尺寸的图像

我试过很多方法

UIImageView *originalImageView = [[UIImage View alloc] initWithImage:originalImage]];

CGRect rect = CGRectMake(100, 100, 300, 200);

UIImage *cropImage = [UIImage imageWithCGImage:CGImageCreateWithImageInRect([originalImageView.image CGImage], rect)];

但是我得到的cropImage只是300*200大小的图像,不能正确缩放。

为什么不计算缩放因子(例如originalImageWidth/smallImageWidth)?
如果小图像中的矩形是
(100100300200)
,则应将大图像剪裁为
(100*因子,100*因子,300*因子,200*因子)

首先使用此方法调整大小为320*320的图像大小:

+(UIImage *)resizeImage:(UIImage *)image width:(float)width height:(float)height
{
  CGSize newSize;
  newSize.width = width;
  newSize.height = height
  UIGraphicsBeginImageContext(newSize);
  [image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];
  UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
  UIGraphicsEndImageContext();
}
现在在imageView中设置已调整大小的图像

UIImage *resizeImage = [YourControllerName resizeImage:originalImage width:320 height:320];
UIImageView *originalImageView = [[UIImage View alloc] initWithImage:resizeImage]];
你现在可以收割了

CGRect rect = CGRectMake(100, 100, 300, 200);
UIImage *cropImage = [UIImage imageWithCGImage:CGImageCreateWithImageInRect([originalImageView.image CGImage], rect)];

这样做如何,它将保持原始图像质量

CGSize bounds = CGSizeMake(320,320) // Considering image is shown in 320*320
CGRect rect = CGRectMake(100, 100, 220, 200); //rectangle area to be cropped

float widthFactor = rect.size.width * (originalImage.size.width/bounds.size.width);
float heightFactor = rect.size.height * (originalImage.size.height/bounds.size.height);
float factorX = rect.origin.x * (originalImage.size.width/bounds.size.width);
float factorY = rect.origin.y * (originalImage.size.height/bounds.size.height);

CGRect factoredRect = CGRectMake(factorX,factorY,widthFactor,heightFactor);
UIImage *cropImage = [UIImage imageWithCGImage:CGImageCreateWithImageInRect([originalImage CGImage], factoredRect)];
最重要的是,如果您想裁剪imagePickerController返回的图像,那么可以通过如下内置函数完成

imagePickerController.allowsEditing = YES;