Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 在不减小几何尺寸的情况下降低图像质量_Iphone_Objective C_Ipad_Core Graphics_Quartz Graphics - Fatal编程技术网

Iphone 在不减小几何尺寸的情况下降低图像质量

Iphone 在不减小几何尺寸的情况下降低图像质量,iphone,objective-c,ipad,core-graphics,quartz-graphics,Iphone,Objective C,Ipad,Core Graphics,Quartz Graphics,我有一个透明的图像 我正在将UIImage的PNG表示上传到我的web服务,它接受的数据小于800K 因此,基本上我想减少大小(不是几何尺寸,而是物理尺寸,即字节),即降低uimage的质量 请不要给我指石英指南 请不要提供使用UIImage的JPEG表示,因为它不支持透明度 请不要将图像缩小,然后进行缩放 我需要减少UIImage中的颜色。有没有办法通过石英实现它 接下来我尝试了,创建了一个上下文并在上面绘制了图像。已经玩过bytesPerRow但仍然失败,请帮助找到解决方案 size_t w

我有一个透明的图像

我正在将UIImage的PNG表示上传到我的web服务,它接受的数据小于800K

因此,基本上我想减少大小(不是几何尺寸,而是物理尺寸,即字节),即降低uimage的质量

请不要给我指石英指南

请不要提供使用UIImage的JPEG表示,因为它不支持透明度

请不要将图像缩小,然后进行缩放

我需要减少UIImage中的颜色。有没有办法通过石英实现它

接下来我尝试了,创建了一个上下文并在上面绘制了图像。已经玩过bytesPerRow但仍然失败,请帮助找到解决方案

size_t width = CGImageGetWidth(image.CGImage);
size_t height = CGImageGetHeight(image.CGImage);
size_t bitsPerComponent = CGImageGetBitsPerComponent(image.CGImage);
size_t bytesPerRow = CGImageGetBytesPerRow(image.CGImage);

CGColorSpaceRef colorSpace = CGImageGetColorSpace(image.CGImage);
CGContextRef ctx = CGBitmapContextCreate(NULL, // Let CG allocate it for us
                                         width,
                                         height,
                                         bitsPerComponent,
                                         bytesPerRow,
                                         colorSpace,
                                         kCGImageAlphaPremultipliedLast); // RGBA
CGColorSpaceRelease(colorSpace);
CGRect rect = CGRectMake( 0, 0, CGImageGetWidth(image.CGImage), CGImageGetHeight(image.CGImage));
CGContextDrawImage( ctx, rect, image.CGImage);

CGImageRef newImg = CGBitmapContextCreateImage(ctx);
UIImage* compressedImage = [UIImage imageWithCGImage:newImg];
CGImageRelease(newImg);

CGContextRelease(ctx);

虽然JPEG不支持透明度,但实际上仍然有一个JPEG选项

获取当前PNG并创建两个文件—一个有损JPEG文件和一个仅包含alpha的PNG文件 频道顺便说一句,ImageMagick在这方面效果很好

然后将JPEG加载到UIImage中,并将PNG作为遮罩应用到UIImage,瞧,您得到了一个具有透明度的JPEG。嗯,有点

我这里没有我的实现,如果我有,它是我的客户项目的一部分,所以我不愿意分享它,但这本指南会让你开始:作为参考,我的尺寸减少了80%左右


祝你好运。

虽然JPEG不支持透明,但实际上仍然有一个JPEG选项

获取当前PNG并创建两个文件—一个有损JPEG文件和一个仅包含alpha的PNG文件 频道顺便说一句,ImageMagick在这方面效果很好

然后将JPEG加载到UIImage中,并将PNG作为遮罩应用到UIImage,瞧,您得到了一个具有透明度的JPEG。嗯,有点

我这里没有我的实现,如果我有,它是我的客户项目的一部分,所以我不愿意分享它,但这本指南会让你开始:作为参考,我的尺寸减少了80%左右


祝你好运。

听起来你想压缩图像然后上传到服务器,或者上传到服务器可以处理的较小的块中?是的,我想要质量较差但仍有透明像素的相同图像。我不想把图像分割成小块,只是为了降低图像的质量,压缩图像。同样的功能,比如在GIMP中保存时压缩图像,我会尝试分离alpha组件,然后应用jpeg压缩。另一方面,解压并应用aplha。我将向您介绍PNG是一种无损图像格式,它已经通过DEFLATE系统进行无损压缩,并且您实际上正在尝试将其转换为有损压缩格式,我想说,这实际上是一个相当困难的问题,最好的解决方法可能是完全避免和修改应用程序的方法。或者尝试使用MacGeek或Overboing的方法。听起来您想压缩图像,然后将其上载到服务器,或者将其上载到服务器可以处理的较小块中?是的,我希望相同的图像质量较差,但仍具有透明像素。我不想把图像分割成小块,只是为了降低图像的质量,压缩图像。同样的功能,比如在GIMP中保存时压缩图像,我会尝试分离alpha组件,然后应用jpeg压缩。另一方面,解压并应用aplha。我将向您介绍PNG是一种无损图像格式,它已经通过DEFLATE系统进行无损压缩,并且您实际上正在尝试将其转换为有损压缩格式,我想说,这实际上是一个相当困难的问题,最好的解决方法可能是完全避免和修改应用程序的方法。或者尝试使用MacGeek或Overboing的方法。