iOS 图片质量压缩

#define kDefaultPress 0.05

#define imgCompressTimeLimit 5

//压缩图片质量

- (NSData *)compressQualityWithMaxLength:(NSInteger)maxLength {

    CGFloat maxByetLimit = maxLength*1024;

    NSData *data = UIImageJPEGRepresentation(self, 1.0);

    if (maxByetLimit==0) return data;

    if (data.length < maxByetLimit) {

        return data;

    } else {

        CGFloat max = 1;

        CGFloat min = 0;

        CGFloat compression = 1;

        CGFloat size = data.length;

        for (int i = 0; i < imgCompressTimeLimit; ++i) {

            compression = (max + min) / 2;

            data = UIImageJPEGRepresentation(self, compression);

            if ((size - data.length) / size < kDefaultPress) {

                break;

            }

            size = data.length;

            if (data.length < maxByetLimit*0.9) {

                min = compression;

            } else if (data.length > maxByetLimit * 1.1) {

                max = compression;

            } else {

                break;

            }

        }

    }

    return data;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
iOS应用中集成Vue.js框架并处理图片压缩通常涉及到前端数据处理、图片资源管理以及后端服务器配合等几个方面。 ### iOS Vue项目中图片压缩的基本流程: #### 1. **前端图片加载与显示** 使用Vue.js进行前端开发时,可以利用`axios`或`fetch`API来进行网络请求获取图片数据,并将图片展示到页面上。Vue.js框架本身并不直接负责图片压缩,而是用于构建交互式的用户界面。 #### 2. **图片压缩策略** - **懒加载**:只加载当前视图可见的图片,其他图片可以延迟加载甚至异步下载。通过配置Vue的`<img>`标签的`lazy="true"`属性实现基本的懒加载功能,进一步可以自定义懒加载的逻辑。 - **按需调整大小**:可以根据设备屏幕尺寸动态调整图片宽度,避免高分辨率设备显示过大的图片占用不必要的带宽和内存空间。 - **内容感知缩放**:对于高质量图片,可以采用更智能的方式如使用WebP或其他支持的内容感知缩放技术,基于图片内容自动选择合适的压缩比例和质量。 #### 3. **服务端图片优化** 对于服务器端的图片存储和分发,可以考虑将原始大图转换成多个版本,包括低分辨率的预览图和适配不同场景的图片。这可以通过服务器端的图片处理库实现,比如使用AWS S3自带的图像处理工具、Firebase Cloud Functions 或者搭建自己的图片处理微服务(例如使用Node.js和Sharp、Python和PIL等库)。 #### 4. **客户端缓存策略** 利用浏览器的缓存机制,对于经常访问的图片,通过设置适当的Cache-Control头信息,可以让浏览器缓存图片减少再次加载的时间。同时,可以使用CDN服务加速图片的全球分发,提高用户体验。 ### 实现步骤示例: 假设您正在使用Express作为后端服务器: ```javascript const express = require('express'); const multer = require('multer'); const sharp = require('sharp'); const app = express(); const upload = multer({ dest: 'uploads/' }); app.post('/upload', upload.single('image'), async (req, res) => { try { const imageBuffer = await sharp(req.file.path) .resize(800) // 自动保持纵横比 .jpeg({ quality: 50 }) // 设置JPEG的质量,从0(完全压缩)到100(无损) .toFile(`compressed/${req.file.filename}`); fs.unlinkSync(req.file.path); // 删除原文件 res.status(200).send({ success: true, message: 'Image compression successful', compressedImagePath: `/compressed/${req.file.filename}` }); } catch (error) { console.error(error); res.status(500).send({ error: 'Failed to compress the image' }); } }); app.listen(3000, () => console.log('Server is running on port 3000')); ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值