当前位置: 首页 > news >正文

jQuery 头像裁剪实现

最近一个项目可能要用到,先把代码实现了再说

avatar.htm
<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>头像裁剪</title><link href="https://cdnjs.cloudflare.com/ajax/libs/cropperjs/1.5.12/cropper.min.css" rel="stylesheet"><style>body {font-family: Arial, sans-serif;max-width: 500px;margin: 0 auto;padding: 20px;}.avatar-container {width: 300px;height: 300px;margin: 0 auto 20px;}#avatar {max-width: 100%;}.btn {display: inline-block;padding: 8px 15px;background: #4CAF50;color: white;border: none;border-radius: 4px;cursor: pointer;margin-right: 10px;}#upload {display: none;}.upload-label {display: inline-block;padding: 8px 15px;background: #2196F3;color: white;border-radius: 4px;cursor: pointer;}</style>
</head>
<body><h2>头像裁剪</h2><div class="avatar-container"><img id="avatar" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=" alt="Avatar"></div><label for="upload" class="upload-label">选择图片</label><input type="file" id="upload" accept="image/*"><button id="crop-btn" class="btn">裁剪并保存</button><script src="https://code.jquery.com/jquery-3.6.0.min.js"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/cropperjs/1.5.12/cropper.min.js"></script><script>$(function() {let cropper;const $avatar = $('#avatar');$('#upload').on('change', function(e) {const files = e.target.files;if (files.length === 0) return;const file = files[0];if (!file.type.match('image.*')) {alert('请选择图片文件');return;}const reader = new FileReader();reader.onload = function(event) {$avatar.attr('src', event.target.result);if (cropper) {cropper.destroy();}cropper = new Cropper($avatar[0], {aspectRatio: 1,viewMode: 1,autoCropArea: 0.8,responsive: true});};reader.readAsDataURL(file);});$('#crop-btn').on('click', function() {if (!cropper) {alert('请先选择图片');return;}const canvas = cropper.getCroppedCanvas({width: 200,height: 200,minWidth: 64,minHeight: 64,fillColor: '#fff'});if (!canvas) {alert('裁剪失败,请重试');return;}// 转换为Blob对象canvas.toBlob(function(blob) {// 这里可以上传到服务器const formData = new FormData();formData.append('avatar', blob, 'avatar.jpg'); //参数 blob:这是要上传的文件数据,这里是裁剪后的图片 Blob 对象,全称为二进制大对象。它是处理文件、图片等二进制数据的核心接口// 添加其他参数(如用户ID)formData.append('user_id', 12345);  // 数字formData.append('username', 'john_doe');  // 字符串// 模拟上传console.log('准备上传:', blob);/**/$.ajax({url: 'avatar.php',method: 'POST',data: formData,processData: false,contentType: false,success: function(response) {alert('上传成功');},error: function() {alert('上传失败');}});// 显示预览const url = URL.createObjectURL(blob);const preview = new Image();preview.src = url;preview.style.width = '100px';preview.style.height = '100px';preview.style.margin = '10px';document.body.appendChild(preview);}, 'image/jpeg', 0.9);});});</script>
</body>
</html>
avatar.php

<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['avatar'])) {$uploadDir = 'avatar/';// $filename = uniqid() . '.jpg'; //uniqid()函数用于生成基于当前时间微秒数的唯一标识符,常用于会话ID、文件命名等场景$filename = $_REQUEST["user_id"]. '.jpg';$filepath = $uploadDir . $filename;if (move_uploaded_file($_FILES['avatar']['tmp_name'], $filepath)) {echo json_encode(['success' => true, 'url' => $filepath]);} else {echo json_encode(['success' => false, 'error' => '上传失败']);}exit;
}
?>

http://www.dtcms.com/a/276631.html

相关文章:

  • 若依前后端分离Vue3版本接入阿里云OSS
  • GoC之汉诺塔绘制
  • JavaSE重点知识
  • 【文献阅读】DEPTH PRO: SHARP MONOCULAR METRIC DEPTH IN LESS THAN A SECOND
  • 【王树森推荐系统】行为序列02:DIN模型(注意力机制)
  • 第10讲——一元函数积分学的几何应用
  • 第八讲~~数据库技术
  • 【InnoDB内存结构】缓冲池,变更缓冲区,自适应哈希索引,日志缓冲区
  • 【项目】GraphRAG基于知识图谱的检索增强技术-实战入门
  • 代码随想录算法训练营65期第17天
  • 余电快速泄放电路
  • 【InnoDB磁盘结构1】系统表空间,独立表空间,双写缓冲区
  • C语言基础知识--动态内存管理
  • 贪心算法题解——划分字母区间【LeetCode】
  • 操作系统—第三章 内存管理
  • 169. 多数元素
  • 二分搜索 (左程云)
  • 【Docker基础】Dockerfile核心概念解析:什么是Dockerfile?与镜像、容器的关系
  • shiro550反序列化漏洞复现(附带docker源)
  • AV1比特流结构
  • zynq-PS篇——bperez77中DMA驱动注意事项
  • 车载以太网-旁路配置
  • MyBatis基于XML配置详细使用指南
  • IMU姿态传感器
  • 栈题解——最小栈【LeetCode】
  • 学历一般,基础一般还有必要刷算法题吗
  • 一种Φ325海底管道机械三通结构设计cad【1张】三维图+设计说明书
  • python学习笔记【1】对字符串的处理
  • 网络安全day1-2笔记
  • kettle从入门到精通 第101课 ETL之kettle DolphinScheduler调度kettle