我想将一个小图像添加到另一个主图像,就像徽章我正在为此编写代码,但问题是如果背景图像很小,那么水印显示非常大。请提供任何建议。
[_productImg sd_setImageWithURL:[NSURL URLWithString:imgUrl]
placeholderImage:nil
completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
if (image.size.width > 0 && img.isdefaultImage) {
UIImage *watermark = [UIImage imageNamed:@"is_default_big"];
CGFloat scale = image.scale;
UIGraphicsBeginImageContextWithOptions(image.size, NO, 0.0);
[image drawInRect:CGRectMake(0, 0, image.size.width, image.size.height)];
[watermark drawInRect:CGRectMake(image.size.width - watermark.size.width, 0, watermark.size.width, watermark.size.height)];
UIImage *result = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
_productImg.image = result;
}
[_spinner stopAnimating];
[_spinner removeFromSuperview];
}];
});
答案 0 :(得分:1)
由于您的图片显然有不同的尺寸,但您似乎显示它们缩放到(大致)相同的尺寸,您需要缩放徽章。
尝试这样的事情:
// Add this line
CGFloat desiredBadgeSize = 0.2; // Badge is 20% of image height
// Change these lines
CGFloat scale = image.size.height / watermark.size.height * desiredBadgeSize;
[watermark drawInRect:CGRectMake(image.size.width - watermark.size.width * scale, 0, watermark.size.width * scale, watermark.size.height * scale)];
上面的代码假定您将图像缩放到设备上的相同高度。
另一种通常更快的方法是将徽章放在UIImageView中,然后将其添加到包含图像的视图中。这样,您仍然可以获得原始图像,并且如果需要,也可以轻松删除徽章。