JavaScript保存图片详解

JavaScript 是一种用于 Web 开发的脚本语言, 绝大多数时候它是在客户端运行的。在实际应用中我们经常需要保存一些图片,下面就从多个方面,详细介绍如何使用 JavaScript 去保存图片。

一、JavaScript 保存图片到手机

在移动端的 Web 开发中,我们经常需要将图片保存到手机本地。使用 JavaScript 保存图片可以用一些第三库, 如 canvas2image、saveSvgAsPng 等。这里我们以 canvas2image 来进行介绍。

canvas2image 是一个可以将 Canvas 对象保存为本地图片的 JavaScript 库。

步骤如下:

1. 引入 canvas2image 库

“`HTML

“`

2. 在 HTML 中,创建一个 Canvas 元素,并将图片绘制到该元素中。

“`HTML

“`

“`JavaScript
$(function () {
/**
* $(”)[0] is equivalent to document.createElement(‘img’).
* It’s faster since jQuery creates a new wrapper object instead of setting the tagName property.
*/
var img = $(”)[0];
img.onload = function () {
// 创建 Canvas 元素
var canvas = document.createElement(“canvas”);
canvas.width = img.width;
canvas.height = img.height;

// 把图像绘制到 Canvas 上
var ctx = canvas.getContext(“2d”);
ctx.drawImage(img, 0, 0, img.width, img.height);
var dataURL = canvas.toDataURL(“image/png”);

// 将图片保存到本地
canvas2image.saveAsPNG(canvas,dataURL.length,canvas.width,canvas.height)
}
img.src=”https://www.baidu.com/img/bd_logo1.png?qua=high”;
})
“`

使用 canvas2image 库,获取图片的 DataURL,然后调用 saveAsPNG 方法进行保存。

二、JavaScript 保存图片到本地指定位置

将图片保存到本地指定位置,需要后端的支持才行。在前端我们需要使用一些后端语言来辅助实现。在这里,我们以PHP举例来演示如何实现。

步骤如下:

1. HTML 代码中,创建一个 input 元素,并指定文件的上传路径

“`HTML



“`

2. 使用 JavaScript 获取图片文件对象

“`JavaScript
$(function () {
$(“#submit-btn”).click( function () {
var file = $(“#file-upload”)[0].files[0];
console.log(file);
// 文件上传逻辑
});
})
“`

3. 将文件对象使用 FormData 类型发送到后台

“`JavaScript
$(function () {
$(“#submit-btn”).click( function () {
var file = $(“#file-upload”)[0].files[0];
console.log(file);

var formData = new FormData();
formData.append(“image”,file);

$.ajax({
url:”saveImage.php”,
type:”POST”,
data:formData,
contentType:false,//这里不能省略
processData:false,//这里不能省略
success:function(data){
alert(“保存成功”)
}
})
});
})
“`

4. 在后端(PHP)中,保存文件

“`php

“`

这里使用了 PHP 的 move_uploaded_file 函数,将文件保存到指定路径中。

三、JavaScript 保存图片到服务器

将图片保存到服务器上需要后端语言的支持。下面以 PHP 为例,演示如何将图片保存到服务器上。

步骤如下:

1. HTML 代码中,创建一个 input 元素,并指定文件的上传路径

“`HTML



“`

2. 使用 JavaScript 获取图片文件对象

“`JavaScript
$(function () {
$(“#submit-btn”).click( function () {
var file = $(“#file-upload”)[0].files[0];
console.log(file);
// 文件上传逻辑
});
})
“`

3. 将文件对象使用 FormData 类型发送到后台

“`JavaScript
$(function () {
$(“#submit-btn”).click( function () {
var file = $(“#file-upload”)[0].files[0];
console.log(file);

var formData = new FormData();
formData.append(“image”,file);

$.ajax({
url:”saveImage.php”,
type:”POST”,
data:formData,
contentType:false,//这里不能省略
processData:false,//这里不能省略
success:function(data){
alert(“保存成功”)
}
})
});
})
“`

4. 在后端(PHP)中,保存文件

“`php

“`

在 PHP 中,使用 move_uploaded_file 函数将文件保存至指定路径中。

四、JavaScript 保存图片到本地

将图片保存到本地,我们需要使用 FileSaver.js 库。

步骤如下:

1. HTML 代码中,创建一个 button 元素

“`HTML

“`

2. 使用 JavaScript 获取图片的 DataURL,使用 saveAs 方法进行保存。

“`JavaScript
$(function () {
$(“#btn-save”).click(function () {
var canvas = document.createElement(“canvas”);
canvas.width = 200;
canvas.height = 200;
// 把图像绘制到 Canvas 上
var ctx = canvas.getContext(“2d”);
ctx.drawImage($(“#img”)[0], 0, 0, 200, 200);
var dataURL = canvas.toDataURL(“image/png”);

saveAs(dataURL, “myPicture.png”);
})
})
“`

这里使用了 {FileSaver.js} 库中的 saveAs 方法,将 DataURL 数据保存至本地。

五、JavaScript 保存图片到指定目录

在前面的例子中,我们都是将文件保存到默认目录中的。下面我们介绍如何将文件保存到指定目录中。

以 PHP 为例,步骤如下:

1. 新建保存文件的文件夹

在服务器上,例如:/var/www/html/myapp/uploads。修改文件夹权限,以确保可以向其中写入文件。

“`Shell
$ sudo mkdir /var/www/html/myapp/uploads
$ sudo chown -R www-data:www-data /var/www/html/myapp/uploads
$ sudo chmod -R 755 /var/www/html/myapp/uploads

“`

2. 保存图片时,指定图片保存路径

“`php
$fileName = $_FILES[‘image’][‘name’];
$uploadPath = “uploads/” . basename($fileName);
move_uploaded_file($_FILES[‘image’][‘tmp_name’], $uploadPath);
“`

这里,我们将文件保存在 upload 目录下,文件名为原文件的名字。

六、JavaScript 保存图片到手机相册

在移动端中,我们经常需要将图片保存到手机相册。 在 IOS 上,使用 JavaScript 保存至相册的方法如下:

“`JavaScript
var imgSrc = ‘https://www.baidu.com/img/bd_logo1.png?qua=high’;
var xhr = new XMLHttpRequest();
xhr.open(“get”, imgSrc, true);
xhr.responseType = “blob”;
xhr.onload = function () {
if (this.status === 200) {
var blob = this.response;
saveImageIOS(blob);
}
}
xhr.send();

function saveImageIOS (blob) {
var reader = new FileReader();
reader.onload = function (event) {
var base64Str = event.target.result;
var img = new Image();
img.onload = function () {
var canvas = document.createElement(“canvas”);
canvas.width = this.width;
canvas.height = this.height;
var ctx = canvas.getContext(“2d”);
ctx.drawImage(this, 0, 0, this.width, this.height);
canvas.toBlob(function (blob) {
var url = URL.createObjectURL(blob);
var a = document.createElement(“a”);
a.href = url;
a.target = ‘_blank’;
a.download = ‘image.png’;
a.click();
URL.revokeObjectURL(url);
})
}
img.src = base64Str;
}
reader.readAsDataURL(blob);
}
“`

在 Android 上,我们可以通过调用 Android 的 Native 方法来实现图片保存。

“`JavaScript
function saveImageAndroid(blob) {
let fileReader = new FileReader();
fileReader.onload = function() {
let arrayBuffer = this.result;
let blob = new Blob([new Uint8Array(arrayBuffer)]);
let type = ‘image/png’;
let filename = ‘image.png’;
try {
window.saveimage.savePicture(blob, type, filename);
} catch (e) {
alert(e.name + “: ” + e.message);
}
};
fileReader.readAsArrayBuffer(blob);
}
“`

这里的 saveimage 是一个 Native 对象,其中含有实现图片保存的方法。

七、保存图片没法保存jpg

在前面的例子中,为了方便,我们将图片格式设置为 png。如果需要保存 jpg 格式的图片,我们可以通过以下方法将 png 图片转成 jpg。

“`JavaScript
function pngToJpg (pngImage) {
var img = document.createElement(‘img’);
img.src = pngImage;
img.onload = function () {
// 创建 Canvas 元素
var canvas = document.createElement(“canvas”);
canvas.width = img.width;
canvas.height = img.height;

// 把图像绘制到 Canvas 上
var ctx = canvas.getContext(“2d”);
ctx.drawImage(img, 0, 0, img.width, img.height);
var jpgDataURL = canvas.toDataURL(“image/jpeg”,0.8);
saveAs(jpgDataURL,”myPicture.jpg”);
}
}
“`

这里需要注意的是, png 转成 jpg 时,需要指定图片的质量。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/159246.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-11-19 18:58
下一篇 2024-11-19 18:58

相关推荐

  • 用Python绘制酷炫图片

    在本篇文章中,我们将展示如何使用Python绘制酷炫的图片。 一、安装Python绘图库 在使用Python绘制图片之前,我们需要先安装Python绘图库。Python有很多绘图库…

    编程 2025-04-29
  • 使用axios获取返回图片

    使用axios获取返回图片是Web开发中很常见的需求。本文将介绍如何使用axios获取返回图片,并从多个方面进行详细阐述。 一、安装axios 使用axios获取返回图片前,首先需…

    编程 2025-04-29
  • Python 图片转表格

    本文将详细介绍如何使用Python将图片转为表格。大家平时在处理一些资料的时候难免会遇到图片转表格的需求。比如从PDF文档中提取表格等场景。当然,这个功能也可以通过手动复制、粘贴,…

    编程 2025-04-29
  • Python缓存图片的处理方式

    本文将从多个方面详细阐述Python缓存图片的处理方式,包括缓存原理、缓存框架、缓存策略、缓存更新和缓存清除等方面。 一、缓存原理 缓存是一种提高应用程序性能的技术,在网络应用中流…

    编程 2025-04-29
  • Python如何抓取图片数据

    Python是一门强大的编程语言,能够轻松地进行各种数据抓取与处理。抓取图片数据是一个非常常见的需求。在这篇文章中,我们将从多个方面介绍Python如何抓取图片数据。 一、使用ur…

    编程 2025-04-29
  • Python利用Image加图片的方法

    在Python中,利用Image库可以快速处理图片,并加入需要的图片,本文将从多个方面详细阐述这个操作。 一、Image库的安装和基础操作 首先,我们需要在Python中安装Ima…

    编程 2025-04-28
  • Avue中如何按照后端返回的链接显示图片

    Avue是一款基于Vue.js、Element-ui等技术栈的可视化开发框架,能够轻松搭建前端页面。在开发中,我们使用到的图片通常都是存储在后端服务器上的,那么如何使用Avue来展…

    编程 2025-04-28
  • 使用CKSlide实现图片轮播

    CKSlide是一个基于jQuery的插件,可以方便地为网页添加幻灯片和图片轮播效果。使用CKSlide可以让网站更加生动、活泼,给用户带来更好的体验。 一、CKSlide基本用法…

    编程 2025-04-28
  • Python中使用socket传输图片

    本文将从多个方面介绍如何使用Python中的socket模块传输图片,涉及到准备工作、发送方部分和接收方部分的详细代码实现。 一、准备工作 在使用Python中的socket模块进…

    编程 2025-04-28
  • Python窗口中导入图片

    Python作为一种高级语言,在图形界面的应用和操作方面越来越得心应手。本篇文章将详细阐述Python窗口中导入图片的方法和实现。 一、导入图片的准备工作 在导入图片前,我们需要先…

    编程 2025-04-28

发表回复

登录后才能评论