如何使用透明笔划保存图像

时间:2015-02-06 04:10:25

标签: ios objective-c uiimageview uiimage

我跟着@Rob回答并按照我想要的方式绘制...但是当我保存这张图片时......笔画不再透明了

Objective-C How to avoid drawing on same color image having stroke color of UIBezierPath

对于保存图像,我编写了此代码

enter image description here

 -(void)saveImage {
    UIGraphicsBeginImageContextWithOptions(self.upperImageView.bounds.size, NO, 0);

    if ([self.upperImageView   respondsToSelector:@selector(drawViewHierarchyInRect:afterScreenUpdates:)])
        [self.upperImageView drawViewHierarchyInRect:self.upperImageView.bounds afterScreenUpdates:YES]; // iOS7+
    else
        [self.upperImageView.layer     renderInContext:UIGraphicsGetCurrentContext()]; // pre iOS7
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndPDFContext();

    UIImageWriteToSavedPhotosAlbum(self.upperImageView.image, self,@selector(image:didFinishSavingWithError:contextInfo:), nil);
}

1 个答案:

答案 0 :(得分:2)

您要么设置图像视图的alpha,路径为1.0,要么使用不允许透明度的内容(例如UIGraphicsBeginImageContextWithOptions YES opaque参数,或以不保留alpha的格式暂存图像,例如JPEG)。

还有一些想法:

  1. 我注意到你只是在画upperImageView。如果您想要合成图像,则需要同时绘制两者。或者您只是想保存其中一个图像视图?

    (对于那些不熟悉其他问题的人来说,整个观点是如何在图像上绘制多条路径,并且具有相同减少的alpha的那些路径的完整集合,而不是使路径的交叉导致一些添加剂这是通过两个单独的图像视图完成的,一个用于底层图像,另一个用于绘制路径。回答这个问题的关键是应该绘制100%alpha的路径,但要添加为视图层本身具有缩小的alpha。)

  2. 您正在绘制的图像视图的alpha是什么。

    注意:在回答其他问题时,保存组合路径的临时副本。我们不得不暂时将alpha设置为1.0。但是在这里保存最终结果时,我们希望将“路径”图像视图的alpha保持在其降低的值。

  3. 不相关,但是你在我原来的例子中忠实地转录了一个拼写错误(自修复以来),我不小心打了UIGraphicsEndPDFContext而不是UIGraphicsEndImageContext。你应该使用后者。

  4. 因此,考虑两个图像视图,一个带有照片,一个带有绘制路径,称为imageImageViewalpha为1.0)和pathsImageView(带alpha 0.5),我可以分别保存快照:

    - (void)saveSnapshot {
        CGRect rect = self.pathsImageView.bounds;
    
        UIGraphicsBeginImageContextWithOptions(rect.size, NO, 0);
        if ([self.pathsImageView respondsToSelector:@selector(drawViewHierarchyInRect:afterScreenUpdates:)]) {
            [self.imageImageView drawViewHierarchyInRect:rect afterScreenUpdates:YES]; // iOS7+
            [self.pathsImageView drawViewHierarchyInRect:rect afterScreenUpdates:YES];
        } else {
            [self.imageImageView.layer renderInContext:UIGraphicsGetCurrentContext()]; // pre iOS7
            [self.pathsImageView.layer renderInContext:UIGraphicsGetCurrentContext()];
        }
        UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
    
        UIImageWriteToSavedPhotosAlbum(image, self, @selector(image:didFinishSavingWithError:contextInfo:), nil);
    }
    

    当我这样做时,得到的合成图像出现在我的相册中:

    image in photos album