difabor пишетДело в том, что увеличение высоты и ширины на одну и ту же величину нарушает пропорции неквадратных картинок.
Я просто увеличил высоту пропорционально отношению высота/ширина.А пример
Добавлено 29-12-2013 03:21:37
Вот я увеличил не квадратную картинку и вроде нормальные пропорции:
http://img839.imageshack.us/img839/4760/fe7t.jpg
Вот оригинал:
Вот как она увеличилась (до исправления кода):
Вот как она увеличилась (после исправления кода):
Обратите внимание - размер по ширине у обоих увеличенных вариантов - тот же.
Чем сильнее картинка отличается от квадратной, тем сильнее разница.
Широкая картинка будет вытягиваться в высоту, а высокая - в ширину.
Впрочем, я могу доказать это математически, если хотите.
Хорошо, когда у человека есть выбор, но плохо, когда он перед ним стоит ©
Отсутствует
bunda1
А с этим кодом никак не подружить новый код, на старом работало.
/*Спрятать подсказки*/ (function() { function onPS(e) { if ( e.target.lastChild && e.target.lastChild.nodeName == "image") return; if ( e.originalTarget.nodeName != "tooltip" || window.__attributesInspector) return; var node = e.originalTarget.ownerDocument.tooltipNode; for (; node && !(node instanceof HTMLAnchorElement); node = node.parentNode); !node && e.preventDefault(); } const observer = { observe: function(win) win.addEventListener("load", this, false), handleEvent: function(e) { var doc = e.target; var win = doc.defaultView; win.removeEventListener("load", this, false); if (doc.location.href == "chrome://browser/content/browser.xul" || win.cbttp) return; win.cbttp = true; win.addEventListener("popupshowing", onPS, true); win.addEventListener("unload", function onUL() { win.removeEventListener("unload", onUL, false); win.removeEventListener("popupshowing", onPS, true); }, false) } } addEventListener("popupshowing", onPS, true); Services.obs.addObserver(observer, "domwindowopened", false); addDestructor(function() Services.obs.removeObserver(observer, "domwindowopened")); })(); return;function winObs(aSubject, aTopic) { var windows = Cc["@mozilla.org/embedcomp/window-watcher;1"].getService(Ci.nsIWindowWatcher).getWindowEnumerator(); while( windows.hasMoreElements() ) { var win = windows.getNext(); LOG( win.name ) } }; Services.ww.registerNotification(winObs); addDestructor(function() { Services.ww.unregisterNotification(winObs) });
Добавлено 29-12-2013 04:53:24
Обратите внимание - размер по ширине у обоих увеличенных вариантов - тот же.
Чем сильнее картинка отличается от квадратной, тем сильнее разница.
Широкая картинка будет вытягиваться в высоту, а высокая - в ширину.
Впрочем, я могу доказать это математически, если хотите.
Не квадратные тоже бывают всякие я думал ты подразумеваешь картинки без прямых углов. Насчёт пропорций не понятно, увеличивая вытянутый прямоугольник пропорции должны сохранятся и при чём тут var ratio = img.naturalHeight/img.naturalWidth;
Отредактировано bunda1 (29-12-2013 04:53:24)
Отсутствует
Допустим, исходная картинка имеет размеры 300х100, т.е. отношение ширины к высоте - 3:1
Если Вы увеличите и ширину и высоту на 170 рх, то станет 470:270, т.е. отношение будет ~1.74:1, т.е почти вдвое исказится!
Чтобы сохранить пропорции надо высоту увеличивать не на 170, а на 170/3, т.е. на ~57px.
Именно это я и сделал - я помножил 170 на ratio=H/W, т.е. на 1/3.
Если бы пропорции были бы другими (например, 400:300, то и ratio=H/W было бы 3/4 и 170 умножалось бы на 3/4, т.е. было бы ~127
Отредактировано difabor (29-12-2013 05:07:52)
Хорошо, когда у человека есть выбор, но плохо, когда он перед ним стоит ©
Отсутствует
А может ты и прав:
alert(3/12); // картинка = 0.25 alert( (3+4)/(12+4) ); // увеличенная картинка = 0.4375 var ratio = 3/12; alert( (3+4*ratio)/(12+4) ); // увеличенная картинка( by difabor) = 0.25
Отредактировано bunda1 (29-12-2013 05:08:14)
Отсутствует
bunda1
Спасибо, теперь работает. Как бы ещё направление колеса мышки поменять, привык на себя увеличивать, а от себя уменьшать.
Лучше спросить у знающих - чем лезть не зная.
Отсутствует
villa7
на
Отредактировано bunda1 (29-12-2013 06:27:39)
Отсутствует
bunda1
Спасибо, хорошая, а главное нужная кнопка получилась, до этого действительно не хватало ручного зума.
Лучше спросить у знающих - чем лезть не зная.
Отсутствует
bunda1
Что-то у меня пропорции всё равно искажаются.
Может с изображениями у которых вышина > ширина
Добавлено 29-12-2013 18:13:13
И нужен пример.
Отредактировано bunda1 (29-12-2013 18:13:13)
Отсутствует
Может с изображениями у которых вышина > ширина
Добавлено Сегодня 18:13:13
И нужен пример.
Да вот хотябы с картинкой из из поста difabor №26
Отсутствует
У меня с картинкой из поста difabor нормально всё. Я же на ней код и обкатывал.
А ты используешь последнюю версию 01-12-2013 17:46:04
Отсутствует
bunda1 пишетМожет с изображениями у которых вышина > ширина
Добавлено Сегодня 18:13:13
И нужен пример.Да вот хотябы с картинкой из из поста difabor №26
Не могли бы Вы привести скан того, что у Вас получается?
У меня пропорции соблюдаются до тех пор, пока картинка не досигнет ширины экрана. А потом она будет увеличиваться только по вертикали. Но это итак ожидаемо - увеличить размер экрана кнопка не может
Хорошо, когда у человека есть выбор, но плохо, когда он перед ним стоит ©
Отсутствует
Не могли бы Вы привести скан того, что у Вас получается?
У меня пропорции соблюдаются до тех пор, пока картинка не досигнет ширины экрана. А потом она будет увеличиваться только по вертикали. Но это итак ожидаемо - увеличить размер экрана кнопка не может
У меня так же если картинка достигла ширину экрана. Так что скан не нужен.
А вот с изображениями у которых вышина > ширина другая ситуация они уходят за экран если достигли высоту экрана.
Отсутствует
difabor пишетНе могли бы Вы привести скан того, что у Вас получается?
http://i.imgur.com/w0oxczO.jpg
И так далее, т.е. ширина вообще не увеличивается.
А Вы уверены, что прошлую версию Вы удалили/закомментировали?
По скрину видно, что картинка у Вас получается квадратная. Проверьте, или не осталось у вас не удалённых кусков старой версии.
Хорошо, когда у человека есть выбор, но плохо, когда он перед ним стоит ©
Отсутствует
А Вы уверены, что прошлую версию Вы удалили/закомментировали?
По скрину видно, что картинка у Вас получается квадратная. Проверьте, или не осталось у вас не удалённых кусков старой версии.
Уверен на 200%. Она получается не квадратная, это я её так тормознул, чтобы оставить видимым ваш рисунок, а так её можно ещё вытягивать хоть сколько. Это у меня на так, проверьте сами, что у вас получится.
Отсутствует
difabor пишетА Вы уверены, что прошлую версию Вы удалили/закомментировали?
По скрину видно, что картинка у Вас получается квадратная. Проверьте, или не осталось у вас не удалённых кусков старой версии.Уверен на 200%. Она получается не квадратная, это я её так тормознул, чтобы оставить видимым ваш рисунок, а так её можно ещё вытягивать хоть сколько. Это у меня на так, проверьте сами, что у вас получится.
Я ещё не умею строить новый профиль, увы...
Хорошо, когда у человека есть выбор, но плохо, когда он перед ним стоит ©
Отсутствует
Я ещё не умею строить новый профиль, увы...
Отсутствует
voqabuhe
Попробуй:
// Увеличивать размеры изображений из контекстного меню на странице, от 30.12.2013. ................................ (function () { var imgZoom = 170; // на сколько увеличить изображение из меню var scrollZoom = 8; // на сколько увеличивать/уменьшать колесиком мыши var scrollTop = 1; // или -1, переключение направление прокрутки для увеличение колёсиком // добавить новый пункт в меню изображений var contextMenu = document.getElementById("contentAreaContextMenu"); var menuitem = contextMenu.appendChild(document.createElement("menuitem")); // как последний пункт меню menuitem.setAttribute("label", "Увеличить размер"); addDestructor(function() contextMenu.removeChild(menuitem)); addEventListener("popupshowing", function() menuitem.hidden = !gContextMenu.onImage, false, contextMenu); // если клик или команда на пункте меню menuitem.setAttribute("oncommand", "this.run();"); menuitem.run = function() { var img = gContextMenu.target; // получить изображение // конвертировать изображение в base64 .... var canvas = document.createElementNS(xhtmlns, 'canvas'); canvas.width = img.naturalWidth; canvas.height = img.naturalHeight; var ctx = canvas.getContext('2d'); ctx.drawImage(img, 0, 0); var base64 = canvas.toDataURL(); // создать и открыть всплывающую подсказку с увеличенным изображением над изображением .... var tooltip = gBrowser.appendChild( document.createElement("tooltip") ); tooltip.setAttribute("onpopuphiding", "event.preventDefault();"); tooltip.style.cssText = "margin-left: -3px; margin-top: -3px; -moz-appearance: none !important; border: none; background: transparent; max-width: none"; var image = tooltip.appendChild( document.createElement("image") ); var h = img.height, w = img.width; image.style.width = w + imgZoom + "px"; image.style.height = h * (1 + imgZoom / w); image.setAttribute("src", base64 ); tooltip.showPopup(img, -1, -1, "popup", "topleft", "none"); // открыть // прокрутка на подсказке меняет размеры изображения, на странице закрывает его .... function imageZoom(e) { if ( e && e.target != image ) { removeTooltip(); return; } var zoom = (e.detail < 0 ? scrollZoom : -scrollZoom) * scrollTop; var h = image.clientHeight, w = image.clientWidth; image.style.width = w + zoom + "px"; image.style.height = h * (1 + zoom / w) + "px"; } gBrowser.addEventListener('DOMMouseScroll', imageZoom, true); // удалить подсказку и обработчики .... function removeTooltip() { try { gBrowser.removeChild( tooltip ) } catch(e) {}; gBrowser.removeEventListener("click", removeTooltip, true); gBrowser.removeEventListener("DOMMouseScroll", imageZoom, true); } gBrowser.addEventListener("click", removeTooltip, true); // удалить по клику на странице } })();
Добавлено 30-12-2013 01:55:00
Я ещё не умею строить новый профиль, увы...
И не надо создавать, вот Mozilla Firefox, Portable Edition Beta, Aurora, and Nightly | PortableApps.com - Portable software for USB, portable and cloud drives
Отредактировано bunda1 (30-12-2013 02:12:04)
Отсутствует
bunda1
Да теперь намного лучше. Вот только знаешь что заметил, когда при увеличение картинки достигают низа страницы, то ширина перестаёт увеличиваться, т.е она начинают вытягиваться.
Отредактировано voqabuhe (30-12-2013 02:43:27)
Отсутствует
bunda1
Да теперь намного лучше. Вот только знаешь что заметил, когда при увеличение картинки достигают низа страницы, то ширина перестаёт увеличиваться, т.е она начинают вытягиваться.
Да есть такое на
Отредактировано bunda1 (30-12-2013 02:58:47)
Отсутствует
Оно того не стоит
В общем согласен. Тогда другой вопрос. А нельзя сделать, чтобы картинка увеличивалась от центра равномерно во все стороны, а не только вниз и вправо?
Добавлено 30-12-2013 03:04:38
bunda1
Смотрю "Оно того не стоит" удалил. Появилась другое мнение?
Отредактировано voqabuhe (30-12-2013 03:04:38)
Отсутствует