在iOS中更改图像的打印大小
在我的应用程序中,我让用户制作优惠券,预览优惠券,然后他们可以选择打印优惠券。现在,它只是简单地将屏幕向下裁剪,只包括优惠券部分并进行打印,但它打印的是全尺寸的8.5 x 11,并且在这样做时使用了大量墨水,因为优惠券的背景是黑色的。如何将其更改为仅打印纸张的2.5 x 3.5英寸部分在iOS中更改图像的打印大小,ios,uiprintpagerenderer,uiprintformatter,uiprintinteractioncntrler,Ios,Uiprintpagerenderer,Uiprintformatter,Uiprintinteractioncntrler,在我的应用程序中,我让用户制作优惠券,预览优惠券,然后他们可以选择打印优惠券。现在,它只是简单地将屏幕向下裁剪,只包括优惠券部分并进行打印,但它打印的是全尺寸的8.5 x 11,并且在这样做时使用了大量墨水,因为优惠券的背景是黑色的。如何将其更改为仅打印纸张的2.5 x 3.5英寸部分 -(void)printer { UIPrintInteractionController *controller = [UIPrintInteractionController sharedPrint
-(void)printer {
UIPrintInteractionController *controller = [UIPrintInteractionController sharedPrintController];
if(!controller){
NSLog(@"Couldn't get shared UIPrintInteractionController!");
return;
}
void (^completionHandler)(UIPrintInteractionController *, BOOL, NSError *) =
^(UIPrintInteractionController *printController, BOOL completed, NSError *error) {
if(!completed && error){
NSLog(@"FAILED! due to error in domain %@ with error code %u",
error.domain, error.code);
}
};
CGRect rect;
rect=CGRectMake(0, 0, 320, 480);
UIGraphicsBeginImageContext(rect.size);
CGContextRef context=UIGraphicsGetCurrentContext();
[self.tabBarController.view.layer renderInContext:context];
UIImage *image=UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
UIImage *img = [self cropImage:image rect:CGRectMake(20,70,279,359)];
UIPrintInfo *printInfo = [UIPrintInfo printInfo];
printInfo.outputType = UIPrintInfoOutputPhoto;
printInfo.jobName = @"Your Coupon";
controller.printInfo = printInfo;
controller.showsPageRange = YES;
controller.printingItem = img;
[controller presentAnimated:YES completionHandler:completionHandler];
}
听起来它可以将您打印的图像缩放到输出媒体的全尺寸。您可以尝试将优惠券图像放入一个更大的图像中,然后打印该合成图像。我没有测试此代码,但它是对裁剪图像所做操作的改编
UIImage *img = [self cropImage:image rect:CGRectMake(20,70,279,359)];
// Some size for the full image.
// Obviously you need to experiment with this to get the size right
CGSize targetSize = CGSizeMake(800, 1050);
// This will put the image in the upper left corner
// you could put it in the middle or wherever
CGPoint imageOrigin = CGPointMake(0, 0);
CGRect imageRect = CGRectMake(imageOrigin.x, imageOrigin.y, img.size.width, img.size.height);
// Always scale to the screen scale to get the sharpest images even at the expense of size.
UIGraphicsBeginImageContextWithOptions(targetSize, NO, 0);
[img drawInRect:imageRect];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
// print configuration stuff from your code example goes here...
controller.printingItem = newImage;