如何实现图像周围的框架

时间:2010-11-30 20:53:21

标签: iphone image-processing uiimage

我喜欢这个(http://shakeitphoto.com/)应用程序在图像周围放置边框的方式..我想在我的应用程序中做类似的事情,但不知道我应该怎么做。

关于如何给出UIImage的任何想法我可以在它周围包裹一个框架吗?

1 个答案:

答案 0 :(得分:2)

从该网站看,您想要一个带阴影的边框。有两个合理的选择,如果你不关心阴影就有3个。

如果你不关心阴影,你可以做一些像

这样的事情
#import <QuartzCore/QuartzCore.h> // this should be at the top

// inside your view layout code
myImageView.layer.borderColor = [UIColor whiteColor].CGColor
myImageView.layer.borderWidth = 5;

这将为您提供插入视图的5像素白色边框,并在视图内容的顶部(例如图像)分层。它不会给你的是一个影子。如果你想要阴影,还有其他两个选择。

你可以创建一个包含边框和阴影的图像,而不是其他任何东西。只需将其他所有内容透明化即可。然后,您可以简单地将此图像叠加在要显示的图像之上(使用2个图像视图,或者通过创建2中的第三个图像)。这应该可以正常工作,但它不会扩展到不同的图像大小。对于链接的应用程序,图像大小始终相同,因此他们可以使用它。

另一种选择是在新图像中简单地在图像上绘制边框和阴影。这里有一些示例代码可以执行此操作 - 它创建一个与原始图像大小相同的新图像,但带有白色阴影边框:

- (UIImage *)borderedImage:(UIImage *)image {
    // the following NO means the new image has an alpha channel
    // If you know the source image is fully-opaque, you may want to set that to YES
    UIGraphicsBeginImageContextWithOptions(image.size, NO, image.scale);
    [image drawAtPoint:CGPointZero];
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    const CGFloat shadowRadius = 5;
    CGContextSetShadowWithColor(ctx, 0, shadowRadius, [UIColor blackColor].CGColor);
    [[UIColor whiteColor] set];
    CGRect rect = (CGRect){CGPointZero, image.size};
    const CGFloat frameWidth = 5;
    rect = CGRectInset(rect, frameWidth / 2.0f, frameWidth / 2.0f);
    UIBezierPath *path = [UIBezierPath bezierPathWithRect:rect];
    path.lineWidth = frameWidth;
    [path stroke];
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    // note: getting the new image this way throws away the orientation data from the original
    // You could create a third image by doing something like
    //   newImage = [UIImage imageWithCGImage:newImage.CGImage scale:newImage.scale orientation:image.orientation]
    // but I am unsure as to how orientation actually affects rendering (if at all)
    UIGraphicsEndImageContext();
    return newImage;
}

(注意:此代码尚未编译,可能包含错误)