itlijunjie / QQHeader

一个高仿QQ讨论组头像的实现

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

锯齿怎么搞

huapeng222 opened this issue · comments

图片变小会有很明显的锯齿,请问有办法去除吗

我看看你的截图,按说不会有这种情况啊,图片按最好按最大头像给出,也就是只有一个头像的时候的尺寸,缩小应该会很清晰啊,我能看看你的截图吗?

把你的demo140_140改成50_50,就能看出来区别了。

发自我的 iPhone

在 2016年8月21日,上午1:20,Li Junjie notifications@github.com 写道:

我看看你的截图,按说不会有这种情况啊,图片按最好按最大头像给出,也就是只有一个头像的时候的尺寸,缩小应该会很清晰啊,我能看看你的截图吗?


You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub, or mute the thread.

@huapeng222 可以使用master上的代码,已经修复问题。
UIGraphicsBeginImageContextWithOptions(self.frame.size, NO, [UIScreen mainScreen].scale); UIBezierPath *bezierPath = [UIBezierPath bezierPathWithCGPath:path]; [bezierPath closePath]; [bezierPath addClip]; [_image drawAtPoint:CGPointZero]; UIImage *maskedImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext();

为什么用这个
[_image drawAtPoint:CGPointZero];
而不用
[_image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
我在我项目中出现了切图只切了一个角
maskedImage:
qq20160822-0

原图:
qq20160822-2

改成
[_image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
就正常了

之前对bitmap的scale理解有点问题,现在你再试试master上的代码。谢谢你的贡献。 @huapeng222

果然可以了.
ps:项目使用的话,我想大多都是网络图片,我在你的基础上简单的增加了网络图片的加载,使用SDWebimage.

+ (JJCustomLayer *)createWithImage:(id)value scale:(CGFloat)scale headerWH:(CGFloat)headerWH degrees:(NSInteger)degrees isClip:(BOOL)isClip imageW:(CGFloat)iamgeW
{
    JJCustomLayer *res = [JJCustomLayer layer];
//    res.shouldRasterize=YES;
    UIImage *image=nil;
    if (![value isKindOfClass:[UIImage class]]) {
        if ([value isKindOfClass:[NSString class]]) {
            NSString *key=[[SDWebImageManager sharedManager] cacheKeyForURL:[NSURL URLWithString: (NSString *)value]];
            image=[[[SDWebImageManager sharedManager] imageCache] imageFromMemoryCacheForKey:key];
            if (!image) {
                image=[[[SDWebImageManager sharedManager] imageCache] imageFromDiskCacheForKey:key];
            }
            if (!image){
                //图片不存在
                image=[UIImage imageNamed:@"default_pic_1"];
                __weak JJCustomLayer *weakLayer=res;
                [[SDWebImageDownloader sharedDownloader] downloadImageWithURL:[NSURL URLWithString:value] options:SDWebImageDownloaderLowPriority progress:nil completed:^(UIImage *d_image, NSData *data, NSError *error, BOOL finished) {
                    if (d_image) {
                        CGSize w_imageSize = d_image.size;
                        CGFloat w_correctScale = headerWH / w_imageSize.height;
                        [weakLayer updateWithImage:d_image scale:scale*w_correctScale degrees:0 isClip:isClip];
                        [weakLayer setNeedsDisplay];
                        [[SDWebImageManager sharedManager].imageCache storeImage:d_image forKey:key toDisk:YES];
                    }

                }];
            }
        }

    }else{
        image=(UIImage *)value;
    }
    CGSize imageSize = image.size;
    CGFloat correctScale = headerWH / imageSize.height;
    [res updateWithImage:image scale:scale*correctScale degrees:degrees isClip:isClip];
    return res;
}

感谢你的分享🤗🤗🤗🤗🤗

现在不需要scale这个参数了,欢迎你贡献自己的代码啊😄