40 lines
1.1 KiB
TypeScript
40 lines
1.1 KiB
TypeScript
import { Component, Input, OnChanges } from '@angular/core';
|
|
|
|
@Component({
|
|
selector: 'qr-code',
|
|
templateUrl: './qrcode.component.html',
|
|
styleUrls: ['./qrcode.component.scss']
|
|
})
|
|
export class QRCodeComponent {
|
|
@Input() txt:string = 'lenta.ru';
|
|
|
|
|
|
saveAsImage(parent: any, btn:any) {
|
|
|
|
let parentElement = parent.qrcElement.nativeElement
|
|
.querySelector("canvas")
|
|
.toDataURL("image/png")
|
|
|
|
|
|
if (parentElement) {
|
|
let blobData = this.convertBase64ToBlob(parentElement)
|
|
const blob = new Blob([blobData], { type: "image/png" })
|
|
const url = window.URL.createObjectURL(blob)
|
|
const link = document.createElement("a")
|
|
btn.href = url
|
|
btn.download = "angularx-qrcode"
|
|
}
|
|
}
|
|
|
|
private convertBase64ToBlob(Base64Image: string) {
|
|
const parts = Base64Image.split(";base64,")
|
|
const imageType = parts[0].split(":")[1]
|
|
const decodedData = window.atob(parts[1])
|
|
const uInt8Array = new Uint8Array(decodedData.length)
|
|
for (let i = 0; i < decodedData.length; ++i) {
|
|
uInt8Array[i] = decodedData.charCodeAt(i)
|
|
}
|
|
return new Blob([uInt8Array], { type: imageType })
|
|
}
|
|
}
|