//
// UIImage+WaterMark.m
// WatermarkDemo
//
// Created by sixiang on 13-3-13.
// Copyright (c) 2013年 enmoli. All rights reserved.
//
#import "UIImage+WaterMark.h"
#define WATER_MARK_SCALE_FACTOR 0.2f
#define WATER_MARK_MARGIN_DEFAULT 20.0f
@implementation UIImage (WaterMark)
-(UIImage *)addMaskWithImage:(UIImage *)mask
{
return [self addMaskWithImage:mask scaled:YES margined:YES];
}
-(UIImage *)addMaskWithImage:(UIImage *)mask scaled:(BOOL)isScaled
{
return [self addMaskWithImage:mask scaled:isScaled margined:NO];
}
-(UIImage *)addMaskWithImage:(UIImage *)mask scaled:(BOOL)isScaled margined:(BOOL)isMargined
{
//get image width and height
CGFloat w = self.size.width;
CGFloat h = self.size.height;
CGFloat logoWidth = mask.size.width;
CGFloat logoHeight = mask.size.height;
CGFloat waterMarkRatio = logoWidth / logoHeight;
if (isScaled) {
logoWidth = w * WATER_MARK_SCALE_FACTOR;
logoHeight = h * WATER_MARK_SCALE_FACTOR;
CGFloat ratio = logoWidth / logoHeight;
if (ratio > waterMarkRatio) {
logoWidth = logoHeight * waterMarkRatio;
} else if (ratio < waterMarkRatio) {
logoHeight = logoWidth / waterMarkRatio;
}
}
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
//create a graphic context with CGBitmapContextCreate
CGContextRef context = CGBitmapContextCreate(NULL, w, h,
8, 4 * w, colorSpace,
kCGImageAlphaPremultipliedFirst);
CGContextDrawImage(context, CGRectMake(0, 0, w, h), self.CGImage);
CGFloat waterMarkStartX = (w - logoWidth);
CGFloat waterMarkStartY = 0;
if (isMargined) {
waterMarkStartX = (w - logoWidth - WATER_MARK_MARGIN_DEFAULT) > 0 ?
(w - logoWidth - WATER_MARK_MARGIN_DEFAULT) :
(w - logoWidth);
waterMarkStartY = (h > WATER_MARK_MARGIN_DEFAULT) ?
WATER_MARK_MARGIN_DEFAULT : 0;
}
CGContextDrawImage(context, CGRectMake(waterMarkStartX, waterMarkStartY,
logoWidth, logoHeight), [mask CGImage]);
CGImageRef imageMasked = CGBitmapContextCreateImage(context);
CGContextRelease(context);
CGColorSpaceRelease(colorSpace);
return [UIImage imageWithCGImage:imageMasked];
}
@end