修改二维码、条形码加载
This commit is contained in:
+74
-2
@@ -859,6 +859,50 @@ function output(callback = null, _save = save) {
|
||||
})
|
||||
}
|
||||
|
||||
// 重新生成二维码和条形码(加载文件后调用)
|
||||
function regenerateQrCodesAndBarcodes(canvas, objsArray) {
|
||||
if (!canvas || !objsArray || !Array.isArray(objsArray)) return
|
||||
|
||||
const objects = canvas.getObjects()
|
||||
|
||||
// 遍历对象(跳过背景图片,索引 0)
|
||||
for (let i = 1; i < objects.length; i++) {
|
||||
const obj = objects[i]
|
||||
if (!obj || obj.type !== 'image') continue
|
||||
|
||||
const objIndex = i - 1
|
||||
if (objIndex >= objsArray.length) continue
|
||||
|
||||
const objMeta = objsArray[objIndex]
|
||||
if (!objMeta || (objMeta.type !== 8 && objMeta.type !== 9)) continue
|
||||
|
||||
// type == 8: 二维码 - 复用 ui.js 中的生成逻辑
|
||||
if (objMeta.type === 8) {
|
||||
const qr = jrQrcode.getQrBase64(objMeta.val || 'https://www.cardsoon.com', {
|
||||
padding: 0,
|
||||
foreground: objMeta.color || '#000000'
|
||||
})
|
||||
obj.setSrc(qr, function(img) {
|
||||
canvas.renderAll()
|
||||
})
|
||||
}
|
||||
// type == 9: 条形码 - 复用 ui.js 中的生成逻辑
|
||||
else if (objMeta.type === 9) {
|
||||
JsBarcode("#barcode", objMeta.val || '123456789', {
|
||||
margin: 0,
|
||||
lineColor: objMeta.color || '#000000',
|
||||
fontSize: objMeta.fontSize || 18,
|
||||
font: objMeta.font || 'Arial'
|
||||
})
|
||||
const barcode = document.getElementById('barcode')
|
||||
const bar = barcode.toDataURL("image/png")
|
||||
obj.setSrc(bar, function(img) {
|
||||
canvas.renderAll()
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 清理不需要的 src 字段(保留自定义图片的 src)
|
||||
function cleanupSrcFields(jsonObjects, objsArray) {
|
||||
if (!jsonObjects || !Array.isArray(jsonObjects)) return;
|
||||
@@ -1017,8 +1061,36 @@ function open(file) {
|
||||
if (j.b.objects[0] && !j.b.objects[0].src) {
|
||||
j.b.objects[0].src = './public/images/bg_back_2.png'
|
||||
}
|
||||
canvas1.loadFromJSON(j.f)
|
||||
canvas2.loadFromJSON(j.b)
|
||||
|
||||
// 为二维码和条形码对象创建临时的 src(Fabric.js 需要 src 来创建 Image 对象)
|
||||
// 加载完成后会重新生成,所以这里只需要一个占位符
|
||||
const fo = j.fo || []
|
||||
const bo = j.bo || []
|
||||
const placeholder = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg=='
|
||||
|
||||
// 为正面二维码和条形码创建临时 src
|
||||
fo.forEach((objMeta, idx) => {
|
||||
if ((objMeta.type === 8 || objMeta.type === 9) && j.f.objects[idx + 1] && !j.f.objects[idx + 1].src) {
|
||||
j.f.objects[idx + 1].src = placeholder
|
||||
}
|
||||
})
|
||||
|
||||
// 为背面二维码和条形码创建临时 src
|
||||
bo.forEach((objMeta, idx) => {
|
||||
if ((objMeta.type === 8 || objMeta.type === 9) && j.b.objects && j.b.objects[idx + 1] && !j.b.objects[idx + 1].src) {
|
||||
j.b.objects[idx + 1].src = placeholder
|
||||
}
|
||||
})
|
||||
|
||||
// 加载 JSON,并在回调中重新生成二维码和条形码
|
||||
canvas1.loadFromJSON(j.f, function() {
|
||||
regenerateQrCodesAndBarcodes(canvas1, fo)
|
||||
canvas1.renderAll()
|
||||
})
|
||||
canvas2.loadFromJSON(j.b, function() {
|
||||
regenerateQrCodesAndBarcodes(canvas2, bo)
|
||||
canvas2.renderAll()
|
||||
})
|
||||
background_image1 = canvas1.getObjects()[0]
|
||||
background_image2 = canvas2.getObjects()[0]
|
||||
|
||||
|
||||
Reference in New Issue
Block a user