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

image-magic-adapter

v1.0.55

Published

一个图片处理库,他可以对图片进行压缩、格式转换、添加水印、修改尺寸等操作

Downloads

339

Readme

ImageMagicAdapter

一个功能丰富的图片处理库,支持图片压缩、格式转换、添加水印以及修改图片尺寸。

在线演示-官网地址: http://luckycola.com.cn/public/dist/imageTool.html

安装

npm install image-magic-adapter

引入项目

import ImageMagicAdapter from 'image-magic-adapter';
let ImageCompressorCls = ImageMagicAdapter.ImageCompressorCls;
let ImageResizerCls = ImageMagicAdapter.ImageResizerCls;

使用示例

图片压缩

HTML 部分:

 <h4>图片压缩Demo</h4>
    <input type="file" id="upload" accept="image/*" multiple />
    <br>
    <label for="quality">压缩比率:(比率越大压缩越大,图片质量越低)</label>
    <input type="range" id="quality" min="0" max="0.9" step="0.1" required value="0.5"/>
    <br>
    <button id="compress">压缩图片</button>
    <br>
    <progress id="progress" value="0" max="100" style="display: none;"></progress>
    <br />
    <span id="progressText"></span>
    <br>
    <div id="outputContainer"></div>
    <br>
    <button id="download" style="display: none;">下载已压缩图片</button>

JavaScript 部分:

import ImageMagicAdapter from 'image-magic-adapter';
let ImageCompressorCls = ImageMagicAdapter.ImageCompressorCls;

const imageCompressor = new ImageCompressorCls(); // 默认压缩质量

 // -----------------------------------------图片压缩-----------------------------------------
        document.getElementById('quality').addEventListener('input', () => {
            const quality = parseFloat(document.getElementById('quality').value);
            imageCompressor.quality = 1 - quality; // 更新压缩质量
            console.log('更新后的压缩质量:', imageCompressor.quality);
        });
        document.getElementById('compress').addEventListener('click', async () => {
            const fileInput = document.getElementById('upload');
            if (!fileInput.files.length) {
                alert('请上传图片');
                return;
            }

            const files = Array.from(fileInput.files);
            const progress = document.getElementById('progress');
            const outputContainer = document.getElementById('outputContainer');
            const downloadButton = document.getElementById('download');
            const progressText = document.getElementById('progressText');

            outputContainer.innerHTML = '';
            downloadButton.style.display = 'none';
            progress.style.display = 'block';
            progress.value = 0;
            progressText.innerText = '';
            // compressImages参数说明:
            //  第一个参数: files:需要压缩的文件数组
            //  第二个参数: callback:压缩完成后的回调函数
            //  第三个参数: 若是压缩png/bmp格式,输出是否保留png/bmp格式,默认为true(建议设置为false)
            // 注意:如果 第三个参数设置true压缩png/bmp格式后的输出的文件为原格式(png/bmp)且压缩效果不佳,就需要依赖设置scaleFactor来调整压缩比例(0-1);如果设置为false,输出为image/jpeg格式且压缩效果更好。
            // 设置caleFactor为0-1,值越大,压缩比例越小,值越小,压缩比例越大(本质是改变图片的尺寸),例: imageCompressor.scaleFactor = 0.5;
            await imageCompressor.compressImages(files, (completed, total) => {
                const outputImg = document.createElement('img');
                outputImg.src = imageCompressor.compressedImages[completed - 1];
                outputContainer.appendChild(outputImg);
                progress.value = (completed / total) * 100;
                progressText.innerText = `已完成文件数: ${completed} / 总文件数: ${total}`;
                if (completed === total) {
                    downloadButton.style.display = 'inline-block';
                }
            }, false);

            downloadButton.onclick = () => {
                if (imageCompressor.compressedImages.length > 0) {
                    imageCompressor.downloadZip(imageCompressor.compressedImages);
                }
            };
        });

图片/PDF格式转换

HTML 部分:

<h4>图片/Pdf格式转换Demo</h4>
    <input type="file" id="upload2" accept="*" multiple />
    <br>
    <button id="imgFormatToPng">转格式</button>

JavaScript 部分:

 // 图片或pdf格式转换方法
        document.getElementById('imgFormatToPng').addEventListener('click', async () => {
            try {
                const fileInput = document.getElementById('upload2');
                if (!fileInput.files.length) {
                    alert('请上传图片');
                    return;
                }
                const files = Array.from(fileInput.files);
                console.log('files==>', files);
                 // 图片转图片格式(支持转['image/jpeg', 'image/png', 'image/webp', 'image/jpg', 'image/bmp']格式)
                // let afterUrl = await imageCompressor.imgFormatFn(files[0], 'image/png', true);

                // png图片转pdf格式
                // let afterUrl = await imageCompressor.imgFormatFn(files[0], 'application/pdf', true);

                // pdf转图片格式(支持转为['image/jpeg', 'image/png']格式)
               let afterUrl = await imageCompressor.imgFormatFn(files[0], 'image/jpeg', true);
                // console.log('afterUrl==>', afterUrl);
            } catch (error) {
                console.log('转换失败:', error);
            }
        })

添加水印

HTML 部分:

<div class="watermarkBox">
        <h4>水印图片Demo</h4>
        <input type="file" id="upload3" accept="image/*" />
        <br>
        <input type="text" id="watermarkText" placeholder="输入水印文字" />
        <br>
        <input type="text" id="fontFamily" placeholder="输入水印字体,例如 'Arial'" value="Arial" />
        <br>
        <input type="number" id="fontSize" placeholder="字体大小" value="30" />
        <br>
        <input type="number" id="rotation" placeholder="旋转角度 (°)" value="0" />
        <br>
        <label>
            <input type="checkbox" id="repeat" />
            水印重复铺满
        </label>
        <br>
        <input type="color" id="color" value="#ffffff" />
        <br>
        <input type="number" id="opacity" placeholder="透明度 (0-1)" value="0.5" step="0.1" min="0" max="1" />
        <br>
        <input type="file" id="watermarkImage" accept="image/*" placeholder="图片水印"/>
        <br>
        <button id="applyWatermark">添加水印</button>
        <br>
        <hr>
        <div id="outputContainer3"></div>
        

        <hr>
        <h4>图片尺寸修改工具Demo</h4>
        <input type="file" id="file-upload" accept="image/*">
        <br><br>
        <img id="image-preview" alt="预览图片" />
        <br><br>
        <label for="width">宽度:</label>
        <input type="number" id="width" placeholder="宽度 (px)">
        <label for="height">高度:</label>
        <input type="number" id="height" placeholder="高度 (px)">
        <br><br>
        <button id="resize-button">修改尺寸</button>
        <button id="download-button">下载图片</button>
    </div>

JavaScript 部分:

// -----------------------------------------添加水印-----------------------------------------
        document.getElementById('applyWatermark').addEventListener('click', () => {
            const fileInput = document.getElementById('upload3');
            const watermarkText = document.getElementById('watermarkText').value;
            const fontFamily = document.getElementById('fontFamily').value;
            const fontSize = parseInt(document.getElementById('fontSize').value);
            const rotation = parseFloat(document.getElementById('rotation').value);
            const shouldRepeat = document.getElementById('repeat').checked;
            const color = document.getElementById('color').value;
            const opacity = parseFloat(document.getElementById('opacity').value);
            const watermarkImageFile = document.getElementById('watermarkImage').files[0]; // 获取水印图片

            if (!fileInput.files.length) {
                alert('请上传图片');
                return;
            }
            const file = fileInput.files[0];
             // 调用通用水印方法(文字水印和图片水印不共存 如果设置了watermarkText那么watermarkImageFile 将失效)
            imageCompressor.applyWatermarkToImage(file, {
                // 文字水印 
                watermarkText,
                // 文字水印字体
                fontFamily,
                //  文字水印尺寸(px)
                fontSize,
                // 水印旋转角度
                rotation,
                // 水印是否重复
                shouldRepeat,
                // 水印颜色
                color,
                // 水印透明度
                opacity,
                // 图片水印(如果有watermarkText将不生效,不共存)
                watermarkImageFile,
                // 水印位置,可选值 top-left center top bottom left right top-right bottom-left bottom-right
                watermarkPosition: 'top-left'
            }, (baseData) => {
                // 显示结果
                const outputContainer = document.getElementById('outputContainer3');
                outputContainer.innerHTML = '';
                const outputImg = document.createElement('img');
                outputImg.src = baseData;
                outputContainer.appendChild(outputImg);
                // 下载水印图片
                imageCompressor.downloadFn(baseData, 'watermarkedImage.png')
            }, err => {
                alert(err);
            });
        });

修改图片尺寸

HTML 部分:

<input type="file" id="file-upload" accept="image/*">
<img id="image-preview" alt="预览图片" />
 <label for="width">宽度:</label>
<input type="number" id="width" placeholder="宽度 (px)">
<label for="height">高度:</label>
<input type="number" id="height" placeholder="高度 (px)">
<button id="resize-button">修改尺寸</button>
<button id="download-button">下载图片</button>

JavaScript 部分:

import ImageMagicAdapter from 'image-magic-adapter';
let ImageResizerCls = ImageMagicAdapter.ImageResizerCls;

const imageResizer = new ImageResizerCls('file-upload', 'image-preview', 'width', 'height', 'resize-button', 'download-button');

API

ImageCompressorCls

  • compressImages(files, callback):压缩图片。
  • imgFormatFn(file, format, shouldDownload):转换图片或PDF格式。
  • applyWatermarkToImage(file, options, callback, errorCallback):给图片添加水印。
  • downloadFn(dataUrl, filename):下载图片。

ImageResizerCls

  • 构造函数接收五个参数,分别是文件上传控件ID、图片预览控件ID、宽度输入框ID、高度输入框ID和尺寸修改按钮ID。

贡献

欢迎贡献代码、解决问题和提出改进建议。

许可证

MIT