具有所有格式的{Javascript Image Converter(base64)

时间:2016-12-06 15:48:49

标签: javascript image hex base64

我正在尝试编写一个转换器(图像)脚本来拾取图像中的校验和(从我的服务器中)并将其添加到选定的图像文件中。

但我遇到了两个问题:

第一个问题:

它只接受jpg文件,我尝试了所有想法,但它不起作用(png,gif等)。

第二个问题是,有效图像需要来自我的服务器(convert.jpg)

但如果我这样做,我会收到此错误:

  

TypeError:FileReader.readAsDataURL的参数1不是   对象

该行:

  

readerValid.readAsDataURL(有效);

我做错了什么? (并为我糟糕的英语而烦恼)

我的代码:

function hexToBytes(hex) {
    for (var bytes = [], c = 0; c < hex.length; c += 2)
    bytes.push(parseInt(hex.substr(c, 2), 16));
    return bytes;
}
function bytesToHex(bytes) {
    for (var hex = [], i = 0; i < bytes.length; i++) {
        hex.push((bytes.charCodeAt(i) >>> 4).toString(16));
        hex.push((bytes.charCodeAt(i) & 0xF).toString(16));
    }
    return hex.join("");
}
function UpdateChecksum(pic, data) {
    var string = ""
    for (var i = 0; i < data.length; ++i) {
        string += String.fromCharCode(data[i])
    }
    pic = atob(pic.replace(/^data:image\/jpeg;base64,/, ""))
    for (var i = 0; i + 1 < pic.length; ++i) {
        if (pic.charCodeAt(i) == 0xFF && pic.charCodeAt(i + 1) == 0xDB) {
            pic = pic.slice(i, pic.length)
            break
        }
    }
    var regexp =  new RegExp("(<checksum2>[0-9a-f]{32}</checksum2>)")
    var match = regexp.exec(string)

    string = string.replace(match[1], "<checksum2>" + bytesToHex(rc4("bns_gamepic", hexToBytes(md5(pic)))) + "</checksum2>")

    for (var i = 0; i < data.length; ++i) {
        data[i] = string.charCodeAt(i)
    }
    return data
}

function process() {
    if(document.getElementById("custom").value == ""){
        document.getElementById('error').innerHTML="Chose Image!";
    }
    else{
        var valid = "convert.jpg";
        var custom = document.getElementById('custom').files[0]
        var readerValid = new FileReader()
        readerValid.onloadend = function(e) {
            var exif = piexif.load(e.target.result)
            var readerCustom = new FileReader()
            readerCustom.onloadend = function(e) {
                var image = new Image()
                image.onload = function() {
                    var result
                    try {
                        result = piexif.remove(e.target.result)
                    } catch (err) {
                        result = e.target.result
                    }
                    exif["Exif"][700] = UpdateChecksum(result, exif["Exif"][700])
                    result = piexif.insert(piexif.dump(exif), result)
                    download(result, "Converted_Image.jpg", "image/jpeg");
                }
                image.src = e.target.result
            }
            readerCustom.readAsDataURL(custom);
        };
        readerValid.readAsDataURL(valid);
    }
}

我希望你能帮助我

有人说: 代码var valid =“convert.jpg”;将valid定义为字符串,但函数readAsDataURL期望blob类型的对象作为参数,而不是字符串。

可是:

var valid = new Blob(["convert.jpg"], { type: 'image/jpeg'});

不工作:/

0 个答案:

没有答案