ImgOps: url - 画 var picurl = new URL("http:\/\/webseobrat.ru\/2022\/24\/"); picurl.protocol = location.protocol; picurl = picurl.href; $(document).ready(function(){ var url = new URL(picurl); if ( url.hostname == "imgops.com" && url.pathname.match(/^\/1hr-tempcache\//) ) { setInterval(function(){ $.post('/check', { item: picurl }); }, 5 * 60 * 1000); } $('#t108').on('click', function() { if ( confirm("WARNING!!!\n\nUpload this image to beeimg.com ?") ) { $.getJSON('https://beeimg.com/api/upload/url/json/', { 'url': picurl }, function(data) { location.href = data.files.view_url; }); } return false; } ); $('#t17').on('click', function() { return confirm('WARNING: This probably won\'t work!\n\nImgur seems to have disabled the instant anonymous upload API. Visit Imgur\'s home page to upload images anonymously. If you know of a solution, please tell me!\n\nTry this anyway?'); } ); if ( url.pathname.substr(-3).toLowerCase() !== 'gif') { $('#t2,#t1,#t99,#t95,#t102').on('click', function() { return confirm('Only works on animated GIF images. The image doesn\'t appear to be a GIF. Continue?.'); } ); } addFavIcon(picurl); });
  contact   +searchbar
IMAGE IS NOT HOSTED HERE.
To remove, contact host site:
webseobrat.ru
Enter the URL of another image:
NEW!  From ImgOps creator: Instant Custom Search Engine

Exclude / Include your custom list of sites from Google.

Made by me – creator of ImgOps – out of hate for Pinterest and AI slop :-)

Operations
server bigger version new!
reverse / similar google • google2 • bing • yandex • tineye • reddit • baidu
quick view fit-zoom • zoom-pan • left 90 ↶ • right 90 ↷ • 180 ⤿ • mirror
edit ours • photopea • lunapic • annotate
host beeimg • imgur
specialized reverse reddit [KD] • reddit [RS] • iqdb (anime) • saucenao (anime+) • ascii2d (anime2) • trace.moe (anime) • pictriev (faces) • stock
hidden data view/remove exif • http headers • error level
effects ASCII
special optimize • waifu2x • tester • what the font • what font is • OCR • OCR2 • QR de-code • color palette • palette2 • 3-way view • wiggle
animated GIFs add sound • big gif • crop / optimize / split
convert base 64 • HTML • JPG • GIF • PNG • BMP • ICO • PDF • TIFF • EPS • HDR/EXR • SVG • TGA • WBMP
custom edit personal links
more coming soon... suggest a new tool
Other useful bookmarklets


let _thumblink = new URL("http:\/\/webseobrat.ru\/2022\/24\/"); _thumblink.protocol = location.protocol; document.getElementById('thumblink').href = _thumblink.href; document.getElementById('thumblink').innerText = _thumblink.href; if ( navigator.userAgent.match(/android/i) ) $('<sup>').css('text-decoration', 'none').html('Needs DesktopView').insertAfter('a[id=t85]'); function getBase64Image(img) { var canvas = document.createElement("canvas"); canvas.width = img.width; canvas.height = img.height; var ctx = canvas.getContext("2d"); ctx.drawImage(img, 0, 0); var dataURL = canvas.toDataURL("image/png"); return dataURL.substring( dataURL.indexOf(',') + 1); } function bing() { let imgUrl = new URL('https://editgif.com/cat-and-dog.jpg'); let url = new URL(imgUrl); let pathname = url.pathname.substr(1); let img = new Image(); img.onload = function(e) { // Content-Disposition: form-data; name="imageBin" let bingParams = new URLSearchParams(); bingParams.append('view', 'detailv2'); bingParams.append('iss', 'sbiupload'); bingParams.append('form', 'SBIVSP'); bingParams.append('rtpu', '/camera?form=SBIVSP&rtpu=https%3a%2f%2fwww4.bing.com%2fvisualsearch'); bingParams.append('rsbisrc', 'ImgPicker'); bingParams.append('ridpbc', '1'); bingParams.append('rsbifsz', '1024+x+768+·+47.58+kB+·+jpeg'); bingParams.append('rsbifnm', 'cat-and-dog.jpg'); bingParams.append('rthw', '1024'); bingParams.append('rthh', '768'); bingParams.append('rptime', '128'); bingParams.append('rdlen', '64968'); bingParams.append('rexpw', '1024'); bingParams.append('rexph', '768'); bingParams.append('ridpp', 'liveview'); bingParams.append('rmode', 'overlay'); bingParams.append('rsobj', '0'); let bingUrl = 'https://www4.bing.com/images/search?' + bingParams; console.log('bingUrl', bingUrl); let form = document.createElement('form'); form.method = 'POST'; form.enctype = 'multipart/form-data'; form.action = bingUrl; let inp1 = document.createElement('input'); inp1.name = 'imgurl'; inp1.value = ''; inp1.type = 'hidden'; form.appendChild(inp1); let inp2 = document.createElement('input'); inp2.name = 'cbir'; inp2.value = 'sbi'; inp2.type = 'hidden'; form.appendChild(inp2); let input = document.createElement('input'); input.name = 'imageBin'; input.value = getBase64Image(img); input.type = 'hidden'; form.appendChild(input); document.body.appendChild(form); console.log(form); form.submit(); }; img.src = '/getImage.php?src=' + encodeURIComponent(url.toString()); console.log('img', img); } function openPopup(instruction, textToCopy) { const popup = document.getElementById('popup'); document.getElementById('instructionText').innerText = instruction; const copyTextArea = document.getElementById('copyText'); copyTextArea.value = textToCopy; copyTextArea.select(); // Pre-select the text copyTextArea.setSelectionRange(0, copyTextArea.value.length); // For mobile devices popup.showModal(); // Show the dialog } document.getElementById('closeButton').addEventListener('click', function() { const popup = document.getElementById('popup'); popup.close(); // Close the dialog }); function imageToBase64() { const imgElement = document.getElementById('mainImage'); const canvas = document.createElement('canvas'); const ctx = canvas.getContext('2d'); canvas.width = imgElement.naturalWidth; canvas.height = imgElement.naturalHeight; ctx.drawImage(imgElement, 0, 0, canvas.width, canvas.height); try { openPopup('Here is your base 64 encoded image:', canvas.toDataURL()); // Base64 encoded image string } catch (e) { if (e instanceof DOMException && e.name === 'SecurityError') { alert('The image from a different website domain could not be directly read.\n\nTO SOLVE: Return to the home page and upload or paste the image. Then click the save icon.'); } else { alert('An error occurred:', e); } } } /** * Makes a div closeable by adding an 'x' button. * If the div is closed, its preference is stored in localStorage for one month. * If the function is called again and a valid preference exists, the div is automatically removed. * @param {string} divId - The ID of the div element to make closeable. */ function closeableDiv(divId) { const divEl = document.getElementById(divId); if (!divEl) return console.warn(`closeableDiv: Div with ID "${divId}" not found.`); const storageKey = `closedDiv_${divId}`; const storedPref = localStorage.getItem(storageKey); if (storedPref) { try { const pref = JSON.parse(storedPref); if (pref.expiration > Date.now()) { divEl.remove(); return console.log(`Div "${divId}" auto-removed.`); // # EXIT # } localStorage.removeItem(storageKey); console.log(`Pref for div "${divId}" expired/invalid.`); } catch (e) { console.error(`Err parsing pref for "${divId}":`, e); localStorage.removeItem(storageKey); } } const closeBtn = Object.assign(document.createElement('button'), { textContent: 'x', 'aria-label': `Close ${divId}` }); Object.assign(closeBtn.style, { float: 'right', top: '0.75rem', right: '0.75rem', backgroundColor: 'black', color: 'gray', border: 'none', borderRadius: '9999px', width: '2rem', height: '2rem', display: 'flex', alignItems: 'center', justifyContent: 'center', fontSize: '1rem', fontWeight: 'bold', cursor: 'pointer' }); // Add click listener to remove div and store preference closeBtn.addEventListener('click', (e) => { e.stopPropagation(); divEl.remove(); console.log(`Div "${divId}" closed.`); const expDate = new Date(); expDate.setMonth(expDate.getMonth() + 1); localStorage.setItem(storageKey, JSON.stringify({ closed: true, expiration: expDate.getTime() })); console.log(`Pref for div "${divId}" stored. Expires: ${expDate.toLocaleString()}`); }); divEl.prepend(closeBtn); // Add button to the start of the div } $(document).ready(function() { closeableDiv('icse'); }); function moveDivToEndRandomly(divId, percentShown) { const storageKey = `hasVisited_${divId}`, div = document.getElementById(divId), parent = div.parentNode; if ( localStorage.getItem(storageKey) ) { if ( Math.random() * 100 > percentShown ) parent.appendChild(div); } else { // always shown first time page is loaded localStorage.setItem(storageKey, 1); } } moveDivToEndRandomly('icse', 2); function hideDivRandomly(divId, percentShown) { const storageKey = `hasVisited_${divId}`; if ( localStorage.getItem(storageKey) ) { if ( Math.random() * 100 > percentShown ) document.getElementById(divId)?.remove(); } else { // always shown first time page is loaded localStorage.setItem(storageKey, 1); } } //hideDivRandomly('icse', 2); function linkwarning(lnk, message) { const EXPIRY_DAYS = 90, STORAGE_KEY = 'link_warning_pref'; const checkPreference = () => { try { const data = JSON.parse(localStorage.getItem(STORAGE_KEY)); if (!data) return false; // Check if the preference has expired if (new Date().getTime() > data.expiry) { localStorage.removeItem(STORAGE_KEY); return false; } return data.doNotWarn; } catch (e) { return false; // Fallback if localStorage is blocked or corrupted } }; const setPreference = (doNotWarn) => { const expiry = new Date().getTime() + (EXPIRY_DAYS * 24 * 60 * 60 * 1000); localStorage.setItem(STORAGE_KEY, JSON.stringify({ doNotWarn, expiry })); }; lnk.addEventListener('click', function(e) { if (checkPreference()) return; e.preventDefault(); const overlay = document.createElement('div'); const dialog = document.createElement('div'); const linkTarget = lnk.getAttribute('target') || '_self'; Object.assign(overlay.style, { position: 'fixed', top: 0, left: 0, width: '100vw', height: '100vh', backgroundColor: 'rgba(0,0,0,0.6)', display: 'flex', alignItems: 'center', justifyContent: 'center', zIndex: 10000 }); Object.assign(dialog.style, { backgroundColor: '#ffffff', color: '#333333', padding: '24px', borderRadius: '8px', maxWidth: '420px', textAlign: 'center', fontFamily: 'system-ui, -apple-system, sans-serif', boxShadow: '0 10px 25px rgba(0,0,0,0.2)' }); dialog.innerHTML = ` <p style="margin: 0 0 20px 0; line-height: 1.5; font-size: 16px;">${message}</p> <div style="margin-bottom: 24px; font-size: 14px; display: flex; align-items: center; justify-content: center; gap: 8px;"> <input type="checkbox" id="dw-checkbox" style="cursor: pointer; margin: 0;"> <label for="dw-checkbox" style="cursor: pointer; user-select: none;">Do not warn me again</label> </div> <div style="display: flex; gap: 12px; justify-content: center;"> <button id="dw-cancel" style=" padding: 10px 20px; cursor: pointer; border: 1px solid #ccc; background: #fff; border-radius: 4px; color: #333; font-weight: 500; ">Cancel</button> <a id="dw-continue" href="${lnk.href}" target="${linkTarget}" style=" padding: 10px 20px; background: #007bff; color: #ffffff; text-decoration: none; border-radius: 4px; font-weight: 500; font-size: 14px; ">Continue</a> </div> `; overlay.appendChild(dialog); document.body.appendChild(overlay); const closeDialog = () => document.body.removeChild(overlay); dialog.querySelector('#dw-cancel').onclick = closeDialog; dialog.querySelector('#dw-continue').onclick = (event) => { const isChecked = dialog.querySelector('#dw-checkbox').checked; if (isChecked) setPreference(true); setTimeout(closeDialog, 100); }; }); } linkwarning(document.getElementById('t852'), '⚠️ Google2 does not work for everyone. It depends on Google and we have no control over it.'); linkwarning(document.getElementById('t74'), '⚠️ Baidu reverse image search is 💩 and unreliable, but you can try anyway.');
x server