// ==UserScript==
// @name Auto Load Big Image
// @version 1.6
// @description Auto expand image width height quality for image urls with custom sizes.
// @author navchandar
// @match http*://*/*
// @exclude http*:*guim.co*/*
// @grant none
// @license MPL-2.0
// @run-at document-start
// @homepage https://navchandar.github.io/
// @homepage https://github.com/navchandar/
// @homepageURL https://navchandar.github.io/
// @contributionURL https://paypal.me/navchandar
// @contributionAmount $1.00
// @copyright 2019, navchandar (https://github.com/navchandar)
// @supportURL https://openuserjs.org/scripts/navchandar/Auto_Load_Big_Image/issues
// @setupURL https://openuserjs.org/install/navchandar/Auto_Load_Big_Image.user.js
// @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAKElEQVQ4jWNgYGD4Twzu6FhFFGYYNXDUwGFpIAk2E4dHDRw1cDgaCAASFOffhEIO3gAAAABJRU5ErkJggg==
// @namespace https://gf.qytechs.cn/users/302262
// ==/UserScript==
function isNum(num) {
return !isNaN(num)
}
function getNum(text) {
return parseInt(text.replace(/[^0-9\.]/g, ''), 10);
}
function Load(uri) {
window.location.href = uri
}
function has(String, search) {
try {
if (String.indexOf(search) > -1) {
return true;
}
}
catch (err) {}
return false;
}
function getRegexMatch(String, regex) {
var finalText = "";
try {
var arr = String.match(regex);
if (arr != null && arr.length >= 1) {
finalText = arr[0];
}
}
catch (err) {}
return finalText;
}
function widthUpdate(uri, w) {
if (has(uri, w)) {
var res = uri.split(w);
if (res.length == 2) {
if (res[1] != "10000" && isNum(res[1])) {
var newuri = res[0] + w + "10000";
Load(newuri);
}
}
}
}
function sizeUpdate(uri, w) {
if (has(uri, w)) {
var res = uri.split(w);
if (res.length == 2) {
var end = "";
var width = "";
if (has(res[1], "&")) {
var arr = res[1].split("&");
for (var i = 1; i < arr.length; i++) {
end += "&" + arr[i];
}
width = arr[0]
}
else {
width = res[1]
}
if (width != "6000" && isNum(width)) {
var newuri = res[0] + w + "6000" + end;
Load(newuri);
}
}
}
}
function WidthandHeightUpdate(uri, format, width, height) {
if (has(uri, format) && has(uri, width) && has(uri, height)) {
var res1 = uri.split(width);
if (res1.length == 2) {
var res2 = res1[1].split(height);
if (res2.length == 2) {
if (res2[0] != "6000" && isNum(res2[0]) && isNum(res2[1])) {
var w = getNum(res2[0]);
var h = getNum(res2[1]);
var newh = parseInt((h / w) * 6000);
var newuri = res1[0] + width + "6000" + height + newh;
Load(newuri);
}
else {
if (res2[0] != "6000" && has(res2[1], "&") && (has(res2[1], "quality=") || has(res2[1], "q="))) {
var qual = "";
if (has(res2[1], "quality=")) {
qual = "&quality=";
}
if (has(res2[1], "q=")) {
qual = "&q=";
}
var res3 = res2[1].split(qual);
if (res3.length >= 2 && isNum(res2[0]) && isNum(res3[0]) && isNum(res3[1])) {
w = getNum(res2[0]);
h = getNum(res3[0]);
newh = parseInt((h / w) * 6000);
newuri = res1[0] + width + "6000" + height + newh + qual + "100";
Load(newuri);
}
}
}
}
}
}
}
function HeightandWidthUpdate(uri, format, height, width) {
if (has(uri, format) && has(uri, width) && has(uri, height)) {
var res1 = uri.split(height);
if (res1.length == 2) {
var res2 = res1[1].split(width);
if (res2.length >= 2) {
var end = "";
var w = "";
var h = res2[0];
if (has(res2[1], "&")) {
var arr = res2[1].split("&");
for (var i = 1; i < arr.length; i++) {
end += "&" + arr[i];
}
w = arr[0]
}
else {
w = res2[1]
}
if (w != "6000" && isNum(w) && isNum(h)) {
var w1 = getNum(w);
var h1 = getNum(h);
var newh = parseInt((h1 / w1) * 6000);
var newuri = res1[0] + height + newh + width + "6000" + end;
Load(newuri);
}
}
}
}
}
function QualityUpdate(uri, format, start, end) {
if (has(uri, format) && has(uri, start) && has(uri, end)) {
var res1 = uri.split(start);
if (res1.length >= 2 && has(res1[1], end)) {
var res2 = res1[1].split(end);
if (res2.length > 0 && res2[0] != 100 && isNum(res2[0])) {
var newuri = uri.replace((start + res2[0] + end), (start + "100" + end));
Load(newuri);
}
}
}
}
function ReplaceCustomCrop(uri, format, regex, replacement) {
if (has(uri, format)) {
try {
if (regex.test(uri)) {
var newuri = uri.replace(regex, replacement);
Load(newuri);
}
}
catch (err) {}
}
}
function UpdateCustomWidthandHeight(uri, format, regex) {
if (has(uri, format)) {
try {
if (regex.test(uri)) {
var res = getRegexMatch(uri, regex);
var rep = res.replace("/", "");
rep = rep.replace("/", "");
if (has(rep, "x") && has(rep, ",")) {
var res1 = rep.split("x");
var res2 = res1[1].split(",");
if (res1[0] != "6000" && res2.length >= 2 && isNum(res1[0]) && isNum(res2[0]) && isNum(res2[1])) {
var w = getNum(res1[0]);
var h = getNum(res2[0]);
var newh = parseInt((h / w) * 6000);
var replacement = "/" + 6000 + "x" + newh + ",100" + "/";
var newuri = uri.replace(res, replacement);
Load(newuri);
}
}
}
}
catch (err) {}
}
}
function CustomWidthandHeightUpdate(uri, width, height) {
if (has(uri, width) && has(uri, height)) {
var res1 = uri.split(width);
var res2 = res1[1].split(height);
if (isNum(res2[0]) && res2[0] != "6000") {
var w = getNum(res2[0]);
var h = getNum(res2[1].split("-")[0]);
var res = width + w + height + h;
var newh = parseInt((h / w) * 6000);
var replacement = width + 6000 + height + newh;
var newuri = uri.replace(res, replacement);
if (uri != newuri) {
Load(newuri);
}
}
}
}
function DPRUpdate(uri, d) {
if (has(uri, d)) {
var res = uri.split(d);
if (isNum(res[1]) && res[1] < 3) {
var newuri = res[0] + d + "3";
Load(newuri);
}
else if (!isNum(res[1]) && has(res[1], "&")) {
var res2 = res[1].split("&")[0];
if (isNum(res2) && res2 < 3) {
newuri = uri.replace((d + res2), (d + "3"));
Load(newuri);
}
}
}
}
function main(uri, format) {
if (has(uri, "image/upload/")) {
ReplaceCustomCrop(uri, "." + format, /q\_auto\//g, "q_auto:best/");
ReplaceCustomCrop(uri, "." + format, /f\_auto\,|fl\_lossy\,|c\_limit\,/g, "");
ReplaceCustomCrop(uri, "." + format, /upload\/[hw]\_\d+\,[hw]\_\d+\//g, "upload/");
}
if (has(uri, "wiki")) {
ReplaceCustomCrop(uri, ".svg", /thumb\/|\/\d+px[-]?\w+(.)*.svg(.)*/g, "");
ReplaceCustomCrop(uri, ".jpg", /thumb\/|\/\d+px[-]?\w+(.)*.jpg(.)*/g, "");
ReplaceCustomCrop(uri, ".png", /thumb\/|\/\d+px[-]?\w+(.)*.png(.)*/g, "");
ReplaceCustomCrop(uri, "." + format, /\/zoom\-crop\/(.)*/g, "");
}
if (has(uri, "blogspot") && !has(uri, "/s6000/")) {
ReplaceCustomCrop(uri, "." + format, /\/s\d+\//g, "/s6000/");
}
if (has(uri, "twimg") && !has(uri, "video")) {
ReplaceCustomCrop(uri, format, /\_normal\./g, ".");
if (has(uri, "name")) {
ReplaceCustomCrop(uri, format, /\?format\=jpg\&name\=(.)*/g, "?format=png&name=large");
ReplaceCustomCrop(uri, format, /\?format\=png\&name\=[^(large)(4)](.*)/g, "?format=png&name=large");
ReplaceCustomCrop(uri, format, /\?format\=png\&name\=medium/g, "?format=png&name=large");
}
else if (has(uri, "format")) {
ReplaceCustomCrop(uri, format, /\?format\=jp(.)*/g, "?format=png");
}
}
if (has(uri, "usercontent")) {
CustomWidthandHeightUpdate(uri, "=w", "-h");
ReplaceCustomCrop(uri, format, /\?s\=\d+\&v\=\d+/g, "");
}
widthUpdate(uri, "." + format + "?w=");
widthUpdate(uri, "." + format + "?width=");
WidthandHeightUpdate(uri, "." + format + "?", "w=", "&h=");
WidthandHeightUpdate(uri, "." + format + "?", "width=", "&height=");
HeightandWidthUpdate(uri, "." + format + "?", "h=", "&w=");
HeightandWidthUpdate(uri, "." + format + "?", "height=", "&width=");
// Remove crops
ReplaceCustomCrop(uri, "." + format, /\/\d+\,\d+\,\d+\,\d+\//g, "/");
ReplaceCustomCrop(uri, "." + format, /\?crop=\d+\%\d\w\d+\%\d\w\w+\%\w+/g, "");
ReplaceCustomCrop(uri, "." + format, /\?crop=\d+\%3A\d+|\?crop=\d+\:\d+/g, "");
ReplaceCustomCrop(uri, "." + format, /thumbor\/\d+x\d+\//g, "thumbor/origxorig/");
if (!has(uri, "%2F2000")) {
ReplaceCustomCrop(uri, "." + format, /\%2F\d+x0.jpg/g, "%2F2000x0.jpg");
}
if (!has(uri, "/2000")) {
ReplaceCustomCrop(uri, "." + format, /\/\d+x0.jpg/g, "/2000x0.jpg");
}
// Remove Blur and bring original
if (has(uri, '.it/') && has(uri, 'blur') && !has(uri, 'external-preview.')) {
if (has(uri, '?blur')) {
ReplaceCustomCrop(uri, format, /\?blur\=(.)*/g, "");
}
else if (has(uri, '?width=')) {
ReplaceCustomCrop(uri, format, /\?width\=(.)*/g, "");
}
if (has(uri, 'preview.')) {
ReplaceCustomCrop(uri, format, /preview/, "i");
}
}
// Remove watermark
ReplaceCustomCrop(uri, format, /\&mark64\=(.)*/g, "");
// Auto Enhance
ReplaceCustomCrop(uri, format, /auto\=compress/g, "auto=enhance");
ReplaceCustomCrop(uri, format, /\&cs\=tinysrgb/g, "");
UpdateCustomWidthandHeight(uri, "." + format, /\/\d+\x\d+\,\d+\//g);
QualityUpdate(uri, "." + format, "/q_", "/");
QualityUpdate(uri, "." + format, "/x,", "/");
QualityUpdate(uri, format, "&q=", "&");
sizeUpdate(uri, "." + format + "?size=");
DPRUpdate(uri, "&dpr=");
}
(function () {
'use strict';
var uri = window.location.href;
if (has(uri, "jpg")) {
main(uri, "jpg");
}
else if (has(uri, "png")) {
main(uri, "png");
}
else if (has(uri, "jpeg")) {
main(uri, "jpeg");
}
else if (has(uri, "webp")) {
main(uri, "webp");
}
else if (has(uri, "usercontent.com")) {
main(uri, "usercontent");
}
})();