webp-simple-converter
Version:
A small node.js library for converting any image to webp file format or converting webp image to any image file format.
102 lines (82 loc) • 2.73 kB
JavaScript
const Buffer = require('buffer').Buffer;
const fs = require('fs');
const temp_path = require('./temp_path.js');
const webp=require('./webpconverter.js');
/**
* @param {string} filepath
* @param {string} type
*/
function encode_image(filepath,type) {
let data = fs.readFileSync(filepath);
let buf = Buffer.from(data);
if(type == "base64"){
let base64 = buf.toString('base64');
// console.log('Base64 ' + filepath + ': ' + base64);
return base64;
}else{
return buf
}
}
/**
* @param {string} base64str
* @param {string} path
*/
const base64_to_image = (base64str,path) =>{
let buf = Buffer.from(base64str, 'base64');
fs.writeFileSync(path, buf, function(error) {
if (error) {
throw error;
} else {
console.log('File created from base64 string!');
}
});
return true;
}
/**
* @param {string} base64str
* @param {string} image_type
* @param {string} option
*/
// convert base64 image to webpbase64 image
module.exports.base64str2webp = (base64str,image_type,option) => {
let filename = String(Math.floor(Math.random() * 100) + 1)
let input_file_path = `${temp_path()}${filename}.${image_type}`;
let webp_image_path = `${temp_path()}${filename}.webp`;
let status = base64_to_image(base64str,input_file_path)
if(status){
const result = webp.cwebp(input_file_path,webp_image_path,option);
return result.then((response) => {
let webp_base64str = encode_image(webp_image_path,"base64")
fs.unlinkSync(input_file_path);
fs.unlinkSync(webp_image_path);
return webp_base64str
});
}else{
console.log("Failed")
}
}
/**
* @param {buffer} buffer
* @param {string} image_type
* @param {string} option
*/
// convert image buffer to webp buffer
module.exports.buffer2webp = (buffer,image_type,option) => {
let buf = Buffer.from(buffer);
let base64str = buf.toString('base64');
let filename = String(Math.floor(Math.random() * 100) + 1)
let input_file_path = `${temp_path()}${filename}.${image_type}`;
let webp_image_path = `${temp_path()}${filename}.webp`;
let status = base64_to_image(base64str,input_file_path)
if(status){
const result = webp.cwebp(input_file_path,webp_image_path,option);
return result.then((response) => {
let webp_buffer = encode_image(webp_image_path,"buffer")
fs.unlinkSync(input_file_path);
fs.unlinkSync(webp_image_path);
return webp_buffer
});
}else{
console.log("Failed")
}
}