mirror of
https://github.com/alexadam/save-as-ebook.git
synced 2025-09-11 09:54:41 +00:00
detect image type from img src links without a file's extension
This commit is contained in:
parent
37bd9328b8
commit
4bfc906eb9
1 changed files with 35 additions and 3 deletions
|
@ -1,3 +1,11 @@
|
||||||
|
|
||||||
|
// Used to replace <img> src links that don't have a file extension
|
||||||
|
// If the image src doesn't have a file type:
|
||||||
|
// 1. Create a dummy link
|
||||||
|
// 2. Detect image type from the binary data & create new links
|
||||||
|
// 3. Replace all the dummy links in tmpGlobalContent with the new links
|
||||||
|
var tmpGlobalContent = null
|
||||||
|
|
||||||
var allImages = [];
|
var allImages = [];
|
||||||
var extractedImages = [];
|
var extractedImages = [];
|
||||||
var allowedTags = [
|
var allowedTags = [
|
||||||
|
@ -56,7 +64,7 @@ function getImageSrc(srcTxt) {
|
||||||
|
|
||||||
let fileExtension = getFileExtension(srcTxt);
|
let fileExtension = getFileExtension(srcTxt);
|
||||||
if (fileExtension === '') {
|
if (fileExtension === '') {
|
||||||
return '';
|
fileExtension = "TODO-EXTRACT"
|
||||||
}
|
}
|
||||||
let newImgFileName = 'img-' + generateRandomNumber(true) + '.' + fileExtension;
|
let newImgFileName = 'img-' + generateRandomNumber(true) + '.' + fileExtension;
|
||||||
|
|
||||||
|
@ -347,6 +355,28 @@ function deferredAddZip(url, filename) {
|
||||||
console.log('Error:', err);
|
console.log('Error:', err);
|
||||||
deferred.resolve();
|
deferred.resolve();
|
||||||
} else {
|
} else {
|
||||||
|
// TODO - move to utils.js
|
||||||
|
if (filename.endsWith("TODO-EXTRACT")) {
|
||||||
|
let oldFilename = filename
|
||||||
|
let arr = (new Uint8Array(data)).subarray(0, 4);
|
||||||
|
let header = "";
|
||||||
|
for(let i = 0; i < arr.length; i++) {
|
||||||
|
header += arr[i].toString(16);
|
||||||
|
}
|
||||||
|
if (header.startsWith("89504e47")) {
|
||||||
|
filename = filename.replace("TODO-EXTRACT", "png")
|
||||||
|
} else if (header.startsWith("47494638")) {
|
||||||
|
filename = filename.replace("TODO-EXTRACT", "gif")
|
||||||
|
} else if (header.startsWith("ffd8ff")) {
|
||||||
|
filename = filename.replace("TODO-EXTRACT", "jpg")
|
||||||
|
} else {
|
||||||
|
// ERROR
|
||||||
|
console.log("Error! Unable to extract the image type!");
|
||||||
|
deferred.resolve();
|
||||||
|
}
|
||||||
|
tmpGlobalContent = tmpGlobalContent.replace(oldFilename, filename)
|
||||||
|
}
|
||||||
|
|
||||||
extractedImages.push({
|
extractedImages.push({
|
||||||
filename: filename,
|
filename: filename,
|
||||||
data: base64ArrayBuffer(data)
|
data: base64ArrayBuffer(data)
|
||||||
|
@ -376,6 +406,8 @@ chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
tmpGlobalContent = tmpContent
|
||||||
|
|
||||||
allImages.forEach((tmpImg) => {
|
allImages.forEach((tmpImg) => {
|
||||||
imgsPromises.push(deferredAddZip(tmpImg.originalUrl, tmpImg.filename));
|
imgsPromises.push(deferredAddZip(tmpImg.originalUrl, tmpImg.filename));
|
||||||
});
|
});
|
||||||
|
@ -389,7 +421,7 @@ chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
|
||||||
styleFileContent: styleFile,
|
styleFileContent: styleFile,
|
||||||
styleFileName: 'style' + generateRandomNumber() + '.css',
|
styleFileName: 'style' + generateRandomNumber() + '.css',
|
||||||
images: extractedImages,
|
images: extractedImages,
|
||||||
content: tmpContent
|
content: tmpGlobalContent
|
||||||
};
|
};
|
||||||
sendResponse(result);
|
sendResponse(result);
|
||||||
}).fail((e) => {
|
}).fail((e) => {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue