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

Posted

技术标签:

【中文标题】如何在 iphone 应用程序开发中添加两个 uiimageview 并将其保存到 iphone 照片库?【英文标题】:How can i add two uiimageview and save it to iphone photo gallery in iphone application development? 【发布时间】:2012-09-09 08:29:24 【问题描述】:

我直奔主题,我的问题是,我有一个 uiview 控制器,它带有 3 个按钮和一个 uiimage 视图。现在,

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

    当我按下第二个按钮时,它将从照片库中获取另一张图片并放置在上一张图片上。

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

我已经完成了第 1 步和第 2 步,但我该怎么做第 3 步??

编辑

假设图片中有一个没有胡须的人 (image1),但我要添加另一个胡须图片 (image2) 来制作一个看起来像胡须男人的图片 (image3)。我想将图片 3 保存在相册中。

提前感谢您的帮助..

【问题讨论】:

添加图片是什么意思?将它们串联起来? @Challenger 添加或合并,无论你是什么。假设图片中有一个没有胡须的男人,但我正在添加另一个胡须图像来制作一个看起来像胡须男人的图像。我希望明白这一点。 @emon 嗨,您想拍摄快照,例如...对吗? [图像1和图像2都作为图像3] @emon 我更新了代码,请查看并告诉您的主要结构... 【参考方案1】:

我自己也有同样的问题,以前我是这样解决的

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

.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

我的设计将是包含两个图像视图的视图(命名为组合视图),其中一个只是源图像[即没有胡子的人]在该图像顶部我有胡须图像...

然后我用这种方式制作图像......

UIImage *myMaskedImage=[UIImage imageFromView:combinedView ];

要保存到相册使用这个...

 UIImageWriteToSavedPhotosAlbum(myMaskedImage, self, nil, nil);

试试这个想法....

新更新: 这个结构你需要维护,还有theView的背景颜色是清晰的颜色

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

【讨论】:

这是关于图像大小调整@emon 很抱歉,但它不工作...图像正在保存,但它变成空白页...【参考方案2】:

In Button TouchUpInSide 事件 写这段代码

创建第一张图片

UIImage *myImage = [UIImage imageNamed:@"image1.png"];

保存第一张图片

UIImageWriteToSavedPhotosAlbum(myImage, self, nil, nil);

创建第二张图片

myImage = [UIImage imageNamed:@"image2.png"];

保存第二张图片

UIImageWriteToSavedPhotosAlbum(myImage, self, nil, nil);

【讨论】:

感谢您的回答,但我需要合并两个图像然后保存。假设图片中有一个没有胡须的人(image1),但我正在添加另一个胡须图像(image2)来制作一个他看起来像胡须男子的图像(image3)。我想将图像 3 保存在相册中。我希望明白这一点。

以上是关于如何在 iphone 应用程序开发中添加两个 uiimageview 并将其保存到 iphone 照片库?的主要内容,如果未能解决你的问题,请参考以下文章

针对 iPhone 应用的 Instruments UI 自动化测试

如何将 TabBar 添加到基于 NavigationController 的 iPhone 应用程序

iPhone 的自定义 UISlider

在 iPhone 上显示多个图像缩略图时 UI 失真

iPhone:如何使用 UI 图形 PushContext

如何实现iphone日历日视图