iphone - 在iphone应用程序开发中如何添加两个uiimageview并将其保存到iphone照片库?

标签 iphone ios uiimageview uiimagepickercontroller save-image

我开门见山,我的问题是,我有一个 uiview Controller ,它需要 3 个按钮和一个 uiimage View 。现在,

  1. 当我按下第一个按钮时,我将从 iPhone 默认照片库中获取图像并放置在 uiimageview 上。

  2. 当我按下第二个按钮时,它会从照片库中拍摄另一张图像并将其放置在上一张图像上。

  3. 现在,当我按下第三个按钮时,这两个图像将添加并使其成为一张图像并保存在相册中。

我已经完成了步骤 1 和步骤 2,但是我该如何做步骤 3?

编辑

假设图片中一个没有 mustache 的男人(图像1),但我添加了另一个 mustache 图像(图像2)来制作一个他看起来像 mustache 男人的图像(图像3)。我想将图像 3 保存到相册中。

提前感谢您的帮助..

最佳答案

我自己之前也遇到过同样的问题,我是这样解决的

尝试这个类别代码......

.h 文件:

#import <UIKit/UIKit.h>

@interface UIImage (MyImage)


+ (UIImage*)imageFromView:(UIView*)view;
+ (UIImage*)imageFromView:(UIView*)view scaledToSize:(CGSize)newSize;
+ (UIImage*)imageWithImage:(UIImage*)image scaledToSize:(CGSize)newSize;
+ (void)beginImageContextWithSize:(CGSize)size;
+ (UIImage *)croppedImage:(UIImage *)myImage :(CGRect)bounds;

//masking the image ....

+ (UIImage*) maskImage:(UIImage *)image withMask:(UIImage *)maskImage;

@end

.m 文件:

#import "UIImage+MyImage.h"

@implementation UIImage (MyImage)

+ (void)beginImageContextWithSize:(CGSize)size
{
    if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) {
        if ([[UIScreen mainScreen] scale] == 2.0) {
            UIGraphicsBeginImageContextWithOptions(size, YES, 2.0);
        } else {
            UIGraphicsBeginImageContext(size);
        }
    } else {
        UIGraphicsBeginImageContext(size);
    }
}

+ (void)endImageContext
{
    UIGraphicsEndImageContext();
}

+ (UIImage*)imageFromView:(UIView*)view
{
    [self beginImageContextWithSize:[view bounds].size];
    BOOL hidden = [view isHidden];
    [view setHidden:NO];
    [[view layer] renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    [self endImageContext];
    [view setHidden:hidden];
    return image;
}

+ (UIImage*)imageFromView:(UIView*)view scaledToSize:(CGSize)newSize
{
    UIImage *image = [self imageFromView:view];
    if ([view bounds].size.width != newSize.width ||
        [view bounds].size.height != newSize.height) {
        image = [self imageWithImage:image scaledToSize:newSize];
    }
    return image;
}

+ (UIImage*)imageWithImage:(UIImage*)image scaledToSize:(CGSize)newSize
{
    [self beginImageContextWithSize:newSize];
    [image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    [self endImageContext];
    return newImage;
}


+ (UIImage *)croppedImage:(UIImage *)myImage :(CGRect)bounds {
    CGImageRef imageRef = CGImageCreateWithImageInRect(myImage.CGImage, bounds);
    UIImage *croppedImage = [UIImage imageWithCGImage:imageRef];
    CGImageRelease(imageRef);
    CGSize asd =  croppedImage.size;
    return croppedImage;
}




+ (UIImage*) maskImage:(UIImage *)image withMask:(UIImage *)maskImage {

    CGImageRef maskRef = maskImage.CGImage; 

    CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(maskRef),
                                        CGImageGetHeight(maskRef),
                                        CGImageGetBitsPerComponent(maskRef),
                                        CGImageGetBitsPerPixel(maskRef),
                                        CGImageGetBytesPerRow(maskRef),
                                        CGImageGetDataProvider(maskRef), NULL, false);

    CGImageRef masked = CGImageCreateWithMask([image CGImage], mask);

    CGImageRelease(mask);
    CGImageRelease(maskRef);
    return [UIImage imageWithCGImage:masked];

}



@end

我的设计将是 View (名为组合 View ),其中包含两个 ImageView ,其中一个只是源图像[即没有 mustache 的男人]在该图像的顶部,我有 mustache 图像...

然后我就这样制作图像....

UIImage *myMaskedImage=[UIImage imageFromView:combinedView ];

要将其保存到相册,请使用此...

 UIImageWriteToSavedPhotosAlbum(myMaskedImage, self, nil, nil);

尝试这个想法......

新更新: 您需要维护此结构以及 theView 的背景颜色为透明颜色

              +theView ---
                 |
                 ->imageview1(person)
                 |
                 ->imageView2(beard alone)

关于iphone - 在iphone应用程序开发中如何添加两个uiimageview并将其保存到iphone照片库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12453913/

相关文章:

iphone - "invitation only"是否意味着测试版?

iphone - 将 iphone/ipod 内存歌曲设置为铃声

ios - 加载uibweview时收到内存警告

ios - 如何将选项卡栏 Controller 添加到 iOS 中的 subview ?

iphone - 只能旋转一次UIImageView

iphone - 将应用程序无线部署到 iPhone?

iphone - 应用程序从后台进入前台

ios - 从另一个 View 类重新加载 Collection View 数据

ios - Swift UIImageView 拉伸(stretch)方面

java - 获取 imageView 的主要 Activity 上下文