Интерфейсное преобразование холста изображения, файла, блоба, DataURL и другого формата

внешний интерфейс сервер Семь Ниуюн Canvas

Недавно я использовал некоторые операции с изображениями для записи заметок.

Преобразовать файл в base64

Сценарий: получить изображение типа файла, если вы просматриваете его непосредственно в html? Здесь нужно использовать новые возможности html5 для преобразования изображения в Base64 и его отображения. Есть два способа:

  • Способ 1: используйте URL.createObjectURL()
<!DOCTYPE html>
<html>
<head>
	<title>base</title>
</head>
<body>
<input type="file" name="" id="file">
<img src="" id="img">
<script type="text/javascript">
	window.onload = function () {
		let $img = document.getElementById('img')
		file.onchange = function (e) {
			console.log(e.target.files[0])
			let file = e.target.files[0]
			let fileUrl = window.URL.createObjectURL(file)
			$img.src = fileUrl
			img.onload = function () {
			    // 手动回收
			    URL.revokeObjectURL(fileUrl)
			}
		}
	}
</script>
</body>
</html>

Когда изображение выбрано, сгенерированный img src похож на"blob:null/4304d4f3-c13b-43e8-83f6-8c80426520ff", изображение может отображаться нормально.

  • Способ 2: используйте FileReader.readAsDataURL()
<!DOCTYPE html>
<html>
<head>
	<title>base</title>
</head>
<body>
<input type="file" name="" id="file">
<img src="" id="img">
<script type="text/javascript">
	window.onload = function () {
		let $img = document.getElementById('img')
		file.onchange = function (e) {
			console.log(e.target.files[0])
			let file = e.target.files[0]
			const fr = new FileReader(file)
			fr.readAsDataURL(file)
			fr.onload = function () {
			 	$img.src = this.result
			}
		}
	}
</script>
</body>
</html>

src тега img будет таким:"data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAABkCAYAAADDhn8LAAA==, может отображаться нормально.

холст в DataURL

Сцена: изображение, нарисованное холстом, отображается в другом месте html. Метод здесь также может выводить холст как Dataurl, чтобы поместить его в тег img.

let imgSrc = canvas.toDataURL('image/png')
// canvas.toDataURL('image/jpeg')

холст для объекта blob

Сценарий: как загрузить изображения, созданные холстом, в облако Qiniu или на сервер? Ответ заключается в том, чтобы вывести холст как объект Blob, чтобы им можно было манипулировать как объектом File.

 canvas.toBlob(function (blobObj) {
	console.log(blobObj)
})

Отображение изображения объекта BLOB-объекта

Сценарий: Полученное изображение в формате Blob, как его отобразить в html? Ответ заключается в преобразовании объекта Blob в форму DataUrl.

canvas.toBlob(function (blobObj) {
	let imgSrc = window.URL.createObjectURL(blobObj)
	document.getElementById('img').src = imgSrc
})

Загрузите изображение, представленное DataURL

Сценарий: изображение, отображаемое в виде DataURL в html, можно загрузить локально? Ответ заключается в использовании тега и установке атрибута загрузки для имитации клика.

function downloadImg () {
	let aLink = document.createElement('a')
	aLink.download = 'fileName.png' // 文件名后缀需要和dataurl表示的相同,否则可能乱码
	aLink.href = dataUrl
	aLink.click()
}

Справочная статья

Категории