更好的oss,obs对象处理库

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,内容安全 1000次 1年
对象存储 OSS,恶意文件检测 1000次 1年
简介: obs,oss图片裁切库。对象处理,数据处理,url处理,链式调用。用户上传的图片长宽比例往往是不固定的,但是我们显示的区域又是固定的,或者上传了一个100 * 100 的图片,实际体积却有5M,所以需要我们对图片进行处理,一方面,可以避免图片变形,另一方面,可以加快图片加载速度。

用户上传的图片长宽比例往往是不固定的,但是我们显示的区域又是固定的,或者上传了一个100 * 100 的图片,实际体积却有5M,所以需要我们对图片进行处理,一方面,可以避免图片变形,另一方面,可以加快图片加载速度。

阿里云对象存储 OSS华为云对象储存obs都为开发者提供了数据处理方案。

比如下图:

网络异常,图片无法展示
|

获取图片信息可以增加/info 参数

https://e-share.obs.cn-north-1.myhuaweicloud.com/example.jpg?x-image-process=image/info

返回值

{
"date:create":"2022-12-07T08:21:44+00:00",
"date:modify":"2022-12-07T08:21:44+00:00",
"format":"JPEG",
"height":2000,
"size":1046583,
"width":2668
}

图片处理

将该图片裁切为100*100的webp 格式

网络异常,图片无法展示
|

图片url处理后

https://e-share.obs.cn-north-1.myhuaweicloud.com/example.jpg?x-image-process=image/resize,w_100,h_100,m_fill,limit_0/format,webp

获取处理后图片信息

https://e-share.obs.cn-north-1.myhuaweicloud.com/example.jpg?x-image-process=image/resize,w_100,h_100,m_fill,limit_0/format,webp/info
{
"date:create":"2022-12-07T08:28:36+00:00",
"date:modify":"2022-12-07T08:28:36+00:00",
"format":"webp",
"height":100,
"size":2210,
"width":100
}

可以看到图片明显变小。

对于简单的场景我们可以通过字符串拼接去处理url,但是一些复杂的场景,这样就力不从心。

更好的处理方式

ObjectProcess

obs,oss 等对象储存URL对象处理参数操作。提供一些别名使操作更加方便。

npm

npm install object-process -S

cdn

unpkg

https://www.unpkg.com/browse/object-process

jsdelivr

https://www.jsdelivr.com/package/npm/object-process
import ObjectProcess from 'object-process'
const imgURl = 'https://image-demo.oss-cn-hangzhou.aliyuncs.com/example.jpg?x-oss-process=image/crop,x_100,y_50'
const urlProcess = new ObjectProcess(imgURl, {
  processName: 'x-oss-process'
})
/***
 * or
 * const urlProcess = new ObjectProcess()
 * urlProcess.process(imgURl)
 */
urlProcess.resize({ w: 200 }).resize('h_100,m_fill').rotate(90).webp()
urlProcess.append('resize', {
  w: 200,
  height: 200
}).set('format', 'png')
urlProcess.delete('crop')
urlProcess.has('resize')
urlProcess.set('resize', {
  w: 300
})
urlProcess.append('resize', 'w_400,h_500,limit_0')
urlProcess.toString() // https://image-demo.oss-cn-hangzhou.aliyuncs.com/example.jpg?x-oss-process=image%2Fresize%2Cw_400%2Ch_500%2Climit_0%2Frotate%2C90%2Fformat%2Cpng&

官方文档直达

应用场景

oss

/***
 * 如果使用cdn
 * const urlProcess = new ObjectProcess.default()
 */
import ObjectProcess from 'object-process'
const imgURl = 'https://image-demo.oss-cn-hangzhou.aliyuncs.com/example.jpg'
const urlProcess = new ObjectProcess(imgURl, {
  processName: 'x-oss-process'
}).append('resize', {
  w: 400,
  h: 500,
  m: 'fill',
  limit: 0
}).webp()
urlProcess.toString() //  https://image-demo.oss-cn-hangzhou.aliyuncs.com/example.jpg?x-oss-process=image%2Fresize%2Cw_400%2Ch_500%2Cm_fill%2Climit_0%2Fformat%2Cwebp

vue组件(vue2)

obs-img

<template>
  <img :src="imgSrc">
</template>
<script>
import ObjectProcess from 'object-process'
export default {
  name: 'obs-image',
  props: {
    // 原始url
    url: {
      type: String,
      default: () => ''
    },
    /***
     * resize 参数
     * w_400,h_500
     * {w: 400, h: 500}
     */
    resize: {
      type: [String, Object],
      default: () => ''
    },
    /***
     * resize m 参数。默认fill
     */
    resizeMode: {
      type: String,
      default: () => 'fill'
    },
    /***
     * 是否转换webp 格式。
     * 默认是
     */
    webp: {
      type: Boolean,
      default: true
    }
  },
  computed: {
    imgSrc () {
      if (this.url) {
        const urlProcess = new ObjectProcess(this.url)
        if (this.resize) {
          // urlProcess.resize(this.resize)
          urlProcess.append('resize', this.resize)
          if (this.resizeMode) {
            urlProcess.resize({
              m: this.resizeMode,
              limit: 0
            })
          }
        }
        if (this.webp) {
          urlProcess.webp()
        }
        return urlProcess.toString()
      } else {
        return ''
      }
    }
  }
}
</script>
<ObsImage url="https://e-share.obs.cn-north-1.myhuaweicloud.com/example.jpg" resize="w_400,h_500"></ObsImage>
 <ObsImage url="https://e-share.obs.cn-north-1.myhuaweicloud.com/example.jpg" :resize="obsImgResize"></ObsImage>
/***
obsImgResize = {
 w: 500,
 h: 400
}
*/

更多应用场景,详见

如果你还不确实是否使用它,可以查看一些常见的使用场景

为什么不是

css object-fit

moz object-fit

object-fit CSS 属性指定可替换元素的内容应该如何适应到其使用高度和宽度确定的框。

图片本身尺寸和体积不会变。


转自:luch的博客

相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
目录
相关文章
|
存储 弹性计算 安全
对象存储OSS快速上手——ossutil工具管理OSS
本实验是对象存储OSS进阶实验。通过本实验,用户可学会如何使用ossutil工具在Linux环境下用命令管理oss,完成文件上传下载等操作。
2776 0
|
6月前
|
分布式计算 DataWorks 调度
DataWorks产品使用合集之在DataWorks中,查看ODPS表的OSS对象如何解决
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
84 1
|
6月前
|
存储 数据可视化 安全
对象存储OSS产品常见问题之有几十亿个txt文件,单个4kb,使用oss如何解决
对象存储OSS是基于互联网的数据存储服务模式,让用户可以安全、可靠地存储大量非结构化数据,如图片、音频、视频、文档等任意类型文件,并通过简单的基于HTTP/HTTPS协议的RESTful API接口进行访问和管理。本帖梳理了用户在实际使用中可能遇到的各种常见问题,涵盖了基础操作、性能优化、安全设置、费用管理、数据备份与恢复、跨区域同步、API接口调用等多个方面。
215 11
|
6月前
|
安全 网络安全 开发工具
对象存储oss使用问题之flutter使用http库进行post请求文件上传返回400如何解决
《对象存储OSS操作报错合集》精选了用户在使用阿里云对象存储服务(OSS)过程中出现的各种常见及疑难报错情况,包括但不限于权限问题、上传下载异常、Bucket配置错误、网络连接问题、跨域资源共享(CORS)设定错误、数据一致性问题以及API调用失败等场景。为用户降低故障排查时间,确保OSS服务的稳定运行与高效利用。
252 1
|
6月前
|
Java API PHP
使用oss服务上传/下载对象
使用oss服务上传/下载对象
408 2
|
6月前
|
存储 编解码 监控
使用oss服务管理对象
使用oss服务管理对象
61 1
|
6月前
|
存储 弹性计算 文件存储
对象存储OSS产品常见问题之OSS Bucket 创建好后更改存储类型如何解决
对象存储OSS是基于互联网的数据存储服务模式,让用户可以安全、可靠地存储大量非结构化数据,如图片、音频、视频、文档等任意类型文件,并通过简单的基于HTTP/HTTPS协议的RESTful API接口进行访问和管理。本帖梳理了用户在实际使用中可能遇到的各种常见问题,涵盖了基础操作、性能优化、安全设置、费用管理、数据备份与恢复、跨区域同步、API接口调用等多个方面。
148 0
|
6月前
|
存储 移动开发 前端开发
对象存储oss使用问题之OSS SDK .net 使用下载例程报错如何解决
《对象存储OSS操作报错合集》精选了用户在使用阿里云对象存储服务(OSS)过程中出现的各种常见及疑难报错情况,包括但不限于权限问题、上传下载异常、Bucket配置错误、网络连接问题、跨域资源共享(CORS)设定错误、数据一致性问题以及API调用失败等场景。为用户降低故障排查时间,确保OSS服务的稳定运行与高效利用。
|
6月前
|
JSON 前端开发 开发工具
对象存储oss使用问题之OSS文件下载中CRC64校验如何解决
《对象存储OSS操作报错合集》精选了用户在使用阿里云对象存储服务(OSS)过程中出现的各种常见及疑难报错情况,包括但不限于权限问题、上传下载异常、Bucket配置错误、网络连接问题、跨域资源共享(CORS)设定错误、数据一致性问题以及API调用失败等场景。为用户降低故障排查时间,确保OSS服务的稳定运行与高效利用。
469 0
|
6月前
|
安全 Java 网络安全
对象存储oss使用问题之使用oss上服务器后显示服务异常如何解决
《对象存储OSS操作报错合集》精选了用户在使用阿里云对象存储服务(OSS)过程中出现的各种常见及疑难报错情况,包括但不限于权限问题、上传下载异常、Bucket配置错误、网络连接问题、跨域资源共享(CORS)设定错误、数据一致性问题以及API调用失败等场景。为用户降低故障排查时间,确保OSS服务的稳定运行与高效利用。
769 0