元素配合JavaScript可以实现图片上传功能。以下是一个基础实现示例:
当前位置:首页 > JavaScript

js 实现图片功能实现

2026-01-30 09:20:54JavaScript

图片上传功能实现

使用HTML的<input type="file">元素配合JavaScript可以实现图片上传功能。以下是一个基础实现示例:

<input type="file" id="imageUpload" accept="image/*">
<img id="preview" src="" alt="Preview" style="max-width: 300px; display: none;">
document.getElementById('imageUpload').addEventListener('change', function(event) {
    const file = event.target.files[0];
    if (!file.type.match('image.*')) {
        alert('请选择图片文件');
        return;
    }

    const reader = new FileReader();
    reader.onload = function(e) {
        const preview = document.getElementById('preview');
        preview.src = e.target.result;
        preview.style.display = 'block';
    };
    reader.readAsDataURL(file);
});

图片压缩处理

上传前对图片进行压缩可以优化性能:

js 实现图片功能实现

function compressImage(file, maxWidth, maxHeight, quality) {
    return new Promise((resolve) => {
        const img = new Image();
        img.src = URL.createObjectURL(file);

        img.onload = () => {
            const canvas = document.createElement('canvas');
            let width = img.width;
            let height = img.height;

            if (width > maxWidth || height > maxHeight) {
                const ratio = Math.min(maxWidth / width, maxHeight / height);
                width *= ratio;
                height *= ratio;
            }

            canvas.width = width;
            canvas.height = height;

            const ctx = canvas.getContext('2d');
            ctx.drawImage(img, 0, 0, width, height);

            canvas.toBlob((blob) => {
                resolve(new File([blob], file.name, {type: 'image/jpeg'}));
            }, 'image/jpeg', quality);
        };
    });
}

图片裁剪功能

使用canvas实现图片裁剪:

function cropImage(imageSrc, cropArea) {
    return new Promise((resolve) => {
        const img = new Image();
        img.src = imageSrc;

        img.onload = () => {
            const canvas = document.createElement('canvas');
            canvas.width = cropArea.width;
            canvas.height = cropArea.height;

            const ctx = canvas.getContext('2d');
            ctx.drawImage(
                img, 
                cropArea.x, cropArea.y, cropArea.width, cropArea.height,
                0, 0, cropArea.width, cropArea.height
            );

            resolve(canvas.toDataURL('image/jpeg'));
        };
    });
}

图片滤镜效果

为图片添加滤镜效果:

js 实现图片功能实现

function applyFilter(imageData, filterType) {
    const filters = {
        grayscale: function(data) {
            for (let i = 0; i < data.length; i += 4) {
                const avg = (data[i] + data[i+1] + data[i+2]) / 3;
                data[i] = data[i+1] = data[i+2] = avg;
            }
        },
        sepia: function(data) {
            for (let i = 0; i < data.length; i += 4) {
                const r = data[i];
                const g = data[i+1];
                const b = data[i+2];
                data[i] = Math.min(255, (r * 0.393) + (g * 0.769) + (b * 0.189));
                data[i+1] = Math.min(255, (r * 0.349) + (g * 0.686) + (b * 0.168));
                data[i+2] = Math.min(255, (r * 0.272) + (g * 0.534) + (b * 0.131));
            }
        }
    };

    if (filters[filterType]) {
        filters[filterType](imageData.data);
    }
    return imageData;
}

图片上传至服务器

使用Fetch API将图片上传到服务器:

async function uploadImage(file, uploadUrl) {
    const formData = new FormData();
    formData.append('image', file);

    try {
        const response = await fetch(uploadUrl, {
            method: 'POST',
            body: formData
        });
        return await response.json();
    } catch (error) {
        console.error('上传失败:', error);
        throw error;
    }
}

图片懒加载

实现图片懒加载优化页面性能:

function lazyLoadImages() {
    const lazyImages = document.querySelectorAll('img[data-src]');

    const observer = new IntersectionObserver((entries) => {
        entries.forEach(entry => {
            if (entry.isIntersecting) {
                const img = entry.target;
                img.src = img.dataset.src;
                img.removeAttribute('data-src');
                observer.unobserve(img);
            }
        });
    });

    lazyImages.forEach(img => observer.observe(img));
}

// 页面加载完成后调用
window.addEventListener('load', lazyLoadImages);
window.addEventListener('scroll', lazyLoadImages);

标签: 功能图片
分享给朋友:

相关文章

h5能实现的功能

h5能实现的功能

H5能实现的功能 H5(HTML5)是一种现代的网页技术标准,具备丰富的功能和特性,适用于多种场景。以下是H5能够实现的主要功能: 多媒体支持 H5原生支持音频和视频播放,无需依赖Flash等插件。…

php实现留言板功能

php实现留言板功能

PHP 留言板功能实现 数据库设计 创建数据库表 messages,包含以下字段: id:自增主键 name:留言者姓名(VARCHAR) email:留言者邮箱(VARCHAR) content:…

h5实现点击复制功能

h5实现点击复制功能

使用document.execCommand方法(兼容旧浏览器) 通过document.execCommand('copy')实现复制功能,需先选中文本内容。创建一个隐藏的textarea或input…

vue实现付费功能

vue实现付费功能

Vue 实现付费功能的方法 集成第三方支付平台 选择适合的第三方支付平台(如支付宝、微信支付、Stripe、PayPal等),并按照其文档进行集成。在 Vue 项目中,可以通过引入支付平台的 SDK…

php 实现聊天功能

php 实现聊天功能

PHP 实现聊天功能的方法 使用 WebSocket 和 Ratchet 库 WebSocket 是实现实时聊天的理想选择。Ratchet 是一个 PHP 库,用于处理 WebSocket 连接。…

vue 实现图片单选

vue 实现图片单选

Vue 实现图片单选功能 在 Vue 中实现图片单选功能,可以通过结合 v-model 和自定义事件来实现。以下是具体实现方法: 方法一:使用 v-model 和计算属性 创建一个 Vue 组件…