npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

cuteimage

v1.0.2

Published

完全使用原生 JavaScript 开发的轻量级前端图片工具助手

Downloads

3

Readme

主要用途

多用于前端上传图片时,对图片进行:格式判断、宽高检测、文件形式转换、压缩体积等操作。

工具特点

  • 完全使用原生 JavaScript 开发,无任何第三方依赖,可自由嵌入到任何前端程序中;
  • 所有方法均以异步形式构建,不阻碍其它程序的执行,保证运行效率;
  • 提供了多个常用的图片工具方法,满足常规的开发需要。

安装引入

cdn 引入

<script src="https://unpkg.com/cuteimage"></script>
<script src="https://cdn.jsdelivr.net/npm/cuteimage"></script>

npm 安装

npm install cuteimage -S
const CuteImage = require( "cuteimage" );

基本用法

<input id="file" type="file" accept="image/*" />

<script>
    document.getElementById( "file" ).onchange = async function () {
        const isImage = await CuteImage( this.files[ 0 ] ).isImage();
        console.log( isImage ? "是图片" : "不是图片" );
    }
</script>

方法列表

  • 功能:检测传入的文件流是否为图片文件,返回 Promise
  • 说明:此方法可准确检测出是否为真正的图片,即使将非图片文件的后缀名手动改为图片格式,也能准确识别。
  • 注意:目前仅支持检测 jpgjpegpnggifbmpwebp 等格式,如果传入其它格式的图片,将会直接判断为不是图片!!!
<input id="file" type="file" accept="image/*" />

<script>
    document.getElementById( "file" ).onchange = async function () {
        const type = await CuteImage( this.files[ 0 ] ).isImage();

        // isImage() 方法会返回检测出的图片格式
        // 如果返回空字符串,则表示不是图片
        console.log( type ? `是图片,格式为:${ type }` : "不是图片" );
    }
</script>
  • 功能:检测传入的文件流是否为 jpgjpeg 图片,返回 Promise
  • 说明:此方法内部会先调用 isImage 方法,如果检测出不是图片则直接返回 false,否则会正常返回 isJPG 的检测结果:truefalse
<input id="file" type="file" accept="image/*" />

<script>
    document.getElementById( "file" ).onchange = async function () {
        const isJPG = await CuteImage( this.files[ 0 ] ).isJPG();
        console.log( isJPG ? "是 jpg 图片" : "不是 jpg 图片" );
    }
</script>
  • 功能:检测传入的文件流是否为 png 图片,返回 Promise
  • 说明:此方法内部会先调用 isImage 方法,如果检测出不是图片则直接返回 false,否则会正常返回 isPNG 的检测结果:truefalse
<input id="file" type="file" accept="image/*" />

<script>
    document.getElementById( "file" ).onchange = async function () {
        const isPNG = await CuteImage( this.files[ 0 ] ).isPNG();
        console.log( isPNG ? "是 png 图片" : "不是 png 图片" );
    }
</script>
  • 功能:检测传入的文件流是否为 bmp 图片,返回 Promise
  • 说明:此方法内部会先调用 isImage 方法,如果检测出不是图片则直接返回 false,否则会正常返回 isBMP 的检测结果:truefalse
<input id="file" type="file" accept="image/*" />

<script>
    document.getElementById( "file" ).onchange = async function () {
        const isBMP = await CuteImage( this.files[ 0 ] ).isBMP();
        console.log( isBMP ? "是 bmp 图片" : "不是 bmp 图片" );
    }
</script>
  • 功能:检测传入的文件流是否为 gif 图片,返回 Promise
  • 说明:此方法内部会先调用 isImage 方法,如果检测出不是图片则直接返回 false,否则会正常返回 isGIF 的检测结果:truefalse
<input id="file" type="file" accept="image/*" />

<script>
    document.getElementById( "file" ).onchange = async function () {
        const isGIF = await CuteImage( this.files[ 0 ] ).isGIF();
        console.log( isGIF ? "是 gif 图片" : "不是 gif 图片" );
    }
</script>
  • 功能:检测传入的文件流是否为 webp 图片,返回 Promise
  • 说明:此方法内部会先调用 isImage 方法,如果检测出不是图片则直接返回 false,否则会正常返回 isWEBP 的检测结果:truefalse
<input id="file" type="file" accept="image/*" />

<script>
    document.getElementById( "file" ).onchange = async function () {
        const isWEBP = await CuteImage( this.files[ 0 ] ).isWEBP();
        console.log( isWEBP ? "是 webp 图片" : "不是 webp 图片" );
    }
</script>
  • 功能:获取传入的图片(文件流)的体积,返回 Promise
  • 说明:此方法内部会先调用 isImage 方法,如果检测出不是图片则直接返回 0null(在传入 true 参数的情况下),否则会正常返回 size 的获取结果。
  • 参数:此方法可根据需要传入一个 true 做为参数,此时返回结果将变为数组形式,包含两个值:
    • 文件体积的字节数
    • 格式化后的文件体积(带有 KB、MB、GB、TB、PB 等单位)
<input id="file" type="file" accept="image/*" />

<script>
    document.getElementById( "file" ).onchange = async function () {
        const size1 = await CuteImage( this.files[ 0 ] ).size();
        console.log( `体积:${ size1 }` );

        const size2 = await CuteImage( this.files[ 0 ] ).size( true );
        console.log( `体积:${ size2 }` );
    }
</script>
  • 功能:返回传入的字节数的格式化后的体积。
<script>
    console.log( CuteImage().calcSize( 5698268 ) )  // 5.43MB
</script>
  • 功能:获取传入的图片(文件流)的名称,返回 Promise
  • 说明:此方法内部会先调用 isImage 方法,如果检测出不是图片则直接返回空字符串,否则会正常返回 name 的获取结果。
  • 参数:此方法可根据需要传入一个 true 做为参数,此时返回结果将不包含图片格式信息。
<input id="file" type="file" accept="image/*" />

<script>
    document.getElementById( "file" ).onchange = async function () {
        const name = await CuteImage( this.files[ 0 ] ).name();
        console.log( `图片名:${ name }` );
    }
</script>
  • 功能:获取传入的图片(文件流)的格式,返回 Promise
  • 说明:此方法内部会先调用 isImage 方法,如果检测出不是图片则直接返回空字符串,否则会正常返回 type 的获取结果。
<input id="file" type="file" accept="image/*" />

<script>
    document.getElementById( "file" ).onchange = async function () {
        const type = await CuteImage( this.files[ 0 ] ).type();
        console.log( `图片格式:${ type }` );
    }
</script>
  • 功能:将传入的图片(文件流)转换为 blob 形式 ,返回 Promise
  • 说明:此方法内部会先调用 isImage 方法,如果检测出不是图片则直接返回 null,否则会正常返回 toBlob 的转换结果。
<input id="file" type="file" accept="image/*" />

<script>
    document.getElementById( "file" ).onchange = async function () {
        const blob = await CuteImage( this.files[ 0 ] ).toBlob();
        console.log( blob );
    }
</script>
  • 功能:将传入的图片(文件流)转换为 dataUrl 形式 ,返回 Promise
  • 说明:此方法内部会先调用 isImage 方法,如果检测出不是图片则直接返回空字符串,否则会正常返回 toDataUrl 的转换结果。
<input id="file" type="file" accept="image/*" />

<script>
    document.getElementById( "file" ).onchange = async function () {
        const dataUrl = await CuteImage( this.files[ 0 ] ).toDataUrl();
        console.log( dataUrl );
    }
</script>
  • 功能:将传入的图片(文件流)转换为 url 形式 ,返回 Promise
  • 说明:此方法内部会先调用 isImage 方法,如果检测出不是图片则直接返回空字符串,否则会正常返回 toURL 的转换结果。
<input id="file" type="file" accept="image/*" />

<script>
    document.getElementById( "file" ).onchange = async function () {
        const url = await CuteImage( this.files[ 0 ] ).toURL();

        // 此 url 可直接设置到 <img> 的 src 属性中
        console.log( url );
    }
</script>
  • 功能:将传入的图片(类型:FileBlobDataUrl)转换为 File 文件流形式 ,返回 Promise
  • 说明:此方法会先判断传入的参数是否符合类型要求,然后判断是否为 isImage 方法中所列出的所支持的图片格式,如果不符合上述两点,则直接返回 null,否则会正常返回 toFile 的转换结果。
  • 注意
    • 此方法可传入一个参数,用来设置转换后的图片名称,如果忽略此参数,将会自动以一个随机字符串命名。另外,如果传入的参数本身就是符合要求的图片文件流,则直接取原始文件流中的 name
<input id="file" type="file" accept="image/*" />

<script>
    document.getElementById( "file" ).onchange = async function () {
        const file = await CuteImage( this.files[ 0 ] ).toFile( "自定义的图片名称" );
        console.log( file );
    }
</script>
  • 功能:获取传入的图片(文件流)的宽高尺寸,返回 Promise
  • 说明:此方法内部会先调用 isImage 方法,如果检测出不是图片则直接返回 null,否则会正常返回 dimension 的获取结果,是数组形式,包含四个值:宽度、高度、宽高比、高宽比。
<input id="file" type="file" accept="image/*" />

<script>
    document.getElementById( "file" ).onchange = async function () {
        const dimension = await CuteImage( this.files[ 0 ] ).dimension();
        console.log( dimension );
    }
</script>
  • 功能:下载传入的图片(文件流),返回 Promise
  • 说明:此方法内部会先调用 isImage 方法,如果检测出不是图片则直接返回 false,否则根据下载情况返回 truefalse
  • 注意
    • 此方法可传入一个参数,用来设置下载后的图片名称,如果忽略此参数,将会自动以一个随机字符串命名。
    • 如果一切解析正常,会自动调用浏览器的下载功能进行图片下载,上述的 truefalse 仅是做为是否成功下载的标识,并且在调起浏览器下载功能后就返回结果,不会等待是否下载完成。
<input id="file" type="file" accept="image/*" />

<script>
    document.getElementById( "file" ).onchange = async function () {
        const result = await CuteImage( this.files[ 0 ] ).download( "自定义的图片名称" );
        console.log( result ? "下载成功" : "下载失败" );
    }
</script>
  • 功能:对传入的图片(文件流)进行压缩,返回 Promise
  • 说明:此方法内部会先调用 isImage 方法,如果检测出不是图片则直接返回 null,否则会返回压缩结果(压缩成功则返回压缩后的数据,压缩失败返回 null)。
  • 注意
    • 不支持压缩 gif 格式的图片;
    • 压缩后的图片将一律转换为 jpg 格式;
    • 如果原始图片是 pngwebp 格式且包含透明通道,压缩后由于转换成了 jpg 格式,因此原有的透明通道将失效;
    • 受限于浏览器的性能和渲染限制,对于超大体积(数百MB 甚至达到 GB)或者超大宽高尺寸(宽高均达到数万像素)的图片,不能保证压缩成功。
  • 参数
    • quality:压缩后的图片质量,取 0 - 1 之间的数字,默认值:0.75
    • dimension:压缩后的图片宽高尺寸,支持 Array 和 Function 类型,默认值:[ 1920 ]
      • 若设置为 Array 类型,规则是:[ width, height ],其中 width 必填,若省略 height,则按照原始宽高比自动设置高度;
      • 若设置为 Function 类型,则可根据实际需要动态设置宽高,函数会将原始宽高做为参数提供给开发者使用,注意,在函数最后需要返回包含宽/高的数组。
  • 返回值
    • dataUrl:压缩后的图片 dataUrl 编码
    • blob:压缩后的图片 blob
    • url:压缩后的图片 url 形式
    • file:压缩后的图片文件流(其中包含了一个自定义属性 __calcSize__,表示格式化后的体积)
    • dimension:压缩后的图片宽高尺寸
    • originalFile:原始图片文件流(其中包含了一个自定义属性 __calcSize__,表示格式化后的体积)
<input id="file" type="file" accept="image/*" />

<script>
    document.getElementById( "file" ).onchange = async function () {

        // 此示例中 compress 方法未传入任何参数
        // 则压缩后的图片质量为 0.75,宽度为 1920px,高度按照原始宽高比自动设置
        const result1 = await CuteImage( this.files[ 0 ] ).compress();
        console.log( result1 );


        // 此示例中 compress 方法传入了如下参数
        // 则压缩后的图片质量为 0.6,宽度为 1000px,高度为 500px
        const result2 = await CuteImage( this.files[ 0 ] ).compress({
            quality: 0.6,
            dimension: [ 1000, 500 ]
        });
        console.log( result2 );


        // 此示例中 compress 方法传入了如下参数
        // 则压缩后的图片质量为 0.7,宽高均为原始宽高的一半
        const result3 = await CuteImage( this.files[ 0 ] ).compress({
            quality: 0.7,
            dimension ( width, height, ratioWH, ratioHW ) {

                // width   => 代表原始宽度
                // height  => 代表原始高度
                // ratioWH => 代表原始宽高比
                // ratioHW => 代表原始高宽比
                return [ width / 2, height / 2 ];
            }
        });
        console.log( result3 );
    }
</script>

浏览器支持

| Chrome | Firefox | Opera | Edge | Safari | IE | | --- | --- | --- | --- | --- | --- | | last 2 versions | last 2 versions | last 2 versions | last 2 versions | last 2 versions | 不支持 |