Pull to refresh

Comments 122

Спасибо, давно хотел поискать подобную штуку, но всё время не было времени, а она тут как тут) Сегодня протестирую.
Пишите о результатах теста. Версия 0.0.1 - так что всё только начинается :-)
Но работает, вроде, стабильно.
Естественно отпишу) у вас там есть мыльце? Завтра-послезавтра протестирую на нагрузку.
Лучше в личку. Спасибо!
Спасибо за полезную статью! Плюс в карму, а пост - в закладки.
Отлично, как раз собирался писать нечто подобное для своего проекта :)
Спасибо большое, интересно.
PS. Где-то недавно видел в качестве плагина для jQuery :)
если найдешь - дай ссылку в личку
Спасибо, хороший кроппер!
Но опять немного не то. Нельзя задачу ресайза сводить только к кропу. Тут уже писали в комментах.
Согласен. Просто мне для проекта нужен был банальный кроп :)
Помомему логичней было бы ресайзить сам прямоугольник, который можно таскать.
UFO just landed and posted this here
Но помещается оно с искажениями (в эксплорере точно, в опере биленейное сглаживание, в фф не в курсе), а когда на сервере будет масштабируется, скорее всего будет более качественно, хотя если пользователь под оперой, какая разница ;)
фф тоже без сглаживания делает
Не совсем верно, необходима и возможность фиксированного кропа, и его ресайз - на выбор. Второе вскоре будет реализовано.
У меня мозг ломается таскать в двух разных местах.
Посмотрите - http://lunatic.dev.jetstyle.ru/imagetool…
Примерно тоже самое. Но в вашем примере можно искажать картинку, меняя только высоту или ширину.
Это я давным давно когда-то писал. Получить превью можно даблкликом по выделению.
Дело в том, что кроп и ресайз - это 2 разные задачи, разве вы не ощущали этого работая в фотошопе? Подумайте, какой скрипт лучше справится с задачей вырезания аватарок, Ваш или мой? :-)
так и представляю... гружу фотку 4000х3000 пикселей и начинаю мотать полосы прокрутки в поисках контрола для ресайза...
Как 8 точек избавять вас от этой проблемы?
Вам тоже придется скроллить и тянуть несколько точек.
Ну а если делать зум фотки, то можно его делать и в моем скрипте под размер страницы.
мне нужно вырезать кусок изображения. не в пикселях. пиксели - это там, за монитором. я вижу изображение, размером в некоторое количество угловых координат. мне нужно вырезать, например, лицо. я хватаюсь за рамку изображения (не за угол какого-то квадратика!) и тяну её, отрезая тем самым лишнее. и мне совершенно наплевать, выделю я зону величиной 50 пикселей на 100-пиксельном изображении или 100 пикселей на 200-пиксельном. я выделил то, что меня интересует. пиксели уж рассчитайте как-нибудь сами.
Есть такая хорошая концепция, что вижу, то и получаю. Надо стараться следовать ей, чтобы не было неприятных сюрпризов.
я вижу выбеленную картинку. я точно получу именно её?
Уели :)
Да, это недостаток, его надо исправлять.
кстати, я категорически против "8 точек". особенно таких кривых реализаций с их пропаданием при перемещении, как тут в комментах предложили... пунктирной рамки более чем достаточно.
По сути не важно какого размера будет прямоугольник в браузере, задача на клиенте определить, какая часть изображения будет использоваться в качестве превью. Клиенту известны пропорции, а какого рамера будет превью - это может решать сервер.
И одно пожелание: при ресайзе изображения (раз пошли по такому пути) неплохо было бы поцизионировать прямоугольник, чтобы смотрел в одну и ту же точку на изображении.
Слишком сложно. Клиент должен думать о пропорциях, сервер что ресайзить.
Должно работать ПО_ЧЕЛОВЕЧЕСКИ, а именно - что вырезал, то и получил.
В таком случае, если возникнет необходимость создавать, например, несколько квадратных превью различных размеров с одного изображения, пользователю придётся повторять одну и туже процедуру для разных размеров квадрата и одного участка изображения.
Как написано в конце статьи, из нововведений в первую очередь появится резайз области кропа ;-)
UFO just landed and posted this here
Да нет вообще-то. На клиенте же всё равно предпросмотр, сам ресайз всё равно буде на сервере, так что показывать лучше картинку в натуральную величину.
UFO just landed and posted this here
Спасибо! Очень нужная штука! Спасибо!

Заодно проверил в браузерах на MacOS X 10.5.3:
FF3.0RC2 - ok
Safari 3.1.1 - ok
Opera 9.27 - ok (и то же самое выделение, что и на Win)
Спасибо, обновлю топик Вашими данными.
Opera 9.50 beta 9981, win32
все гуд
Спасибо! В статье уже указано Opera 9+, но в этом браузере я не тестировал.
Похоже у Оперы жизнь налаживается потихоньку :-)
Просто автор заведомо написал нормально, грамотно, как веб-разработчик, а не с отмазками в коде, мол, пользователи оперы идут лесом. В вконтакте такие люди должны работать. Да и много где ещё.
Спасибо Вам. Интересная реализация.
а как оно отдает параметры обратно? т.е. поресайзил-поресайзил — потом на сервер отправил и сохранил, как?
Читайте статью:
onUpdate — единственное обязательное свойство (точнее метод). Принимает в качестве значения функцию, которая через this имеет доступ ко всем свойствам объекта кроп-ресайза. В третьем примере демки все необходимые данные выводятся в завершающий страницу текстовый блок. Этот метод жизненно необходим для сохранения того, что вы наменяли, обычно в hidden-поля формы.

+ третий пример в демке
здорово, но не густо с настройками. Мне кажется на FLASH решить эту проблему можно более универсально!
Настроек будет больше, но именно в области ресайза/кропа. Скрипт не задумывался, как редактор фоток.
Мне кажется, что конкретно для этой задачи больше и не нужно. Тем более не нужен флеш :)
zoom в Лисе портит всю картину, уезжает прямоугольник кропа относительно самой фотографии
Это фича! :-)
Кроп не должен мешать ресайзу, и смещается, когда до него доходит граница фотки.
FireFox 3RC1 - Linux
Сначала вроде работало нормально потом стало "заедать". То объект тащится как картинка то по отпусканию кнопки продолжает ездить за кусором. А так штука очень полезная, спасибо вам.
Спасибо! Описанная бага случается, если мышь на пределы окна вытащить, что в общем-то забороть сложно.
В FF3RC2 наблюдается следующий баг (или фича):
В любом из трех примеров начинаю перемещать выделение. Все ОК. Теперь отпускаю левую кнопку мыши. Пробую еще раз, и не идет! Курсор принимает вид "перемещение невозможно".
Если попробовать перемещать в других примерах - там все ок. Возвращаемся к первому - опять все ок. Такое ощущение, что у Вас есть какая-то глобальная переменная, которая сбрасывается при переходе от одной картинки к другой.
Трабла наблюдается на всех изображениях. Иногда (раза два получилось), баг не наблюдается: можно дважды поперемещать выделение внутри одной картинки.
В IE6 все отлично, как Вы и написали.
Спасибо, попробую добраться до третьего ФФ и воспроизвести.
Глобальных переменных нет вообще, обижаете :-)
Вроде бы есть это, чем не подходит?
http://developer.yahoo.com/yui/imagecropper/
Спасибо за ссылку, не знал.
А принцип работы там немного другой, так что скрипты совсем не идентичны.
Тогда это:
http://developer.yahoo.com/yui/resize/
Я просто к тому что не стоит изобретать велосипед, только зря время потратишь...
Велосипед изобретать безусловно не стоит. А вот создавать легкие и быстрые приложению, точечно бьющие по конкретной задаче, имхо, правильно, особенно если писать их на чистом js. Недостаток всех js-фреймфорков - неповоротливость и слишком большое число настроек.
base.js и jquery.js - крохотные фреймворки.

к тому же уменьшают объём нашего кода в разы, одновременно увеличивая его портабельность.
>...не стоит изобретать велосипед, только зря время потратишь...

Интересная точка зрения. А все велосипеды в мире изобретены/созданы одним производителем?
Человек ведь пишет для себя, для своих проектов. Сюда выкладывает, чтобы народ потестировал и т.п. А Вы ему - зачем это нужно...
>...не стоит изобретать велосипед, только зря время потратишь...
Я думал это известная всем поговорка, смысл которой должен быть ясен =)
>А Вы ему - зачем это нужно...
Ну может и нужно. Тут трудно спорить: если цель узнать JS получше и написать свой небольшой и полезный скриптик, то тогда время потрачено не зря.
Если цель быстро и качественно решить поставленную задачу, то проще использовать уже готовое решение. В начале топика написано "...готового решения для кропа-ресайза изображений, на движке JavaScript/HTML/CSS еще не предлагалось...", но приведена уже куча ссылок со вполне нормальным решением этой задачи. И с этой точки зрения время вседаки потрачено зря. Но так бывает и в этом нет ничего плохого.
Дело в том, что из предложенных ссылок для решения задачи подходит только одна - от serzhb. И то там другая реализация.
>Я думал это известная всем поговорка, смысл которой должен быть ясен =)

А поговорка, как говориться, мимо нот. Автор не утверждал, что он изобрел велосипед. Он лишь смастерил свой, неповторимый в контексте хабра и не только (его велосипед легок, прост в управлении в сравнении с профессиональными моделями).

>Если цель быстро и качественно решить поставленную задачу...
>В начале топика написано…

Там же есть и то, что Вы упустили из виду: "Пройдясь по хабра-поиску выяснил...". Поэтому Вы напрасно гадаете, какие у автора цели – они определены совершенно четко и ясно.

>И с этой точки зрения время вседаки потрачено зря.

С подобной точкой зрения я сталкивался не раз. Мне тоже писали: "Заче-е-ем? Возьми готовое". Доходило даже до: "Может свою ось возьмешься писать?". А я думаю так, что это программиста не касается. Ему если понадобилось или заставили – он написал, а если сказали взять какую-то либу, то он так и делает. Так что "советы", подобные вашим, его не волнуют, т.к. это просто-напросто не по адресу.
Нехватает растягивание картинки.

То есть если она изначально 200х200, но мне надо растянуть ее до 300х300.
Ага, это есть в планах
проработать ресайз изображения в сторону увеличения
jQuery UI -> Demos -> Real-World -> Image Cropper.

Ссылку дал на свой сайт, так как на офсайте этот пример работает не совсем корректно (нет работает drag), но это только потому, что у них для примеров не последняя версия загружается.
Да, снова 8 точек, спасибо за ссылку.
За что не люблю плагины jQuery - так это за тежяловесность и глюки.
Как и в ЯХУ-скрипте - нет возможности фиксированного кропа и ресайза фотки онли.
Ну а в целом, подбирается коллекция кроперов :-)
Глюки кроппера были (и есть, скорее всего) на IE6, больше нигде ничего не наблюдал. Но в текущем варианте (по ссылке) глюков не наблюдается. Да и вообще - я использую довольно много плагинов jQuery - проблем не замечаю.

нет возможности фиксированного кропа и ресайза фотки онли.
Ты о чем?
Задача: вырезать автарки для сайта 90*90, чтобы юзер ничего не напортачил и вырезал то, что ему нравится. Решите её кропом в 8 точек без ресайза фотки?
ЧИТАТЬ! Внимательнее читать статью, там в начале всё написано!
Ага, а дальше? Фотку то хочется уменьшить, чтобы рожа в фиксированный размер влезла :-)
Ага. Теперь вьехал. Ну тут уже без переделки кода небольшой не обойдешься.
исправляется одна строка в скрипте.

или пишекться свой. - с помощью draggable и resizable весь плагин получается крохотным и портируемым - без затрат.
Глючит неимоверно
Аналог на JQuery, на мой взгляд, не менее приятный:
http://www.webmotionuk.co.uk/jquery/image_upload_crop.php
О ДА! Интересное решение. Разработчики пошли "другим путем", но решили ту же задачу. Спасибо за ссылку!
UFO just landed and posted this here
помню давно делал как подобное, но версия была только для прототипа, очень долго возился с напильником, в итоге добавил еще таких функций:
- ресайз кропа
- масштабируемость исходной картинки; задаются максимальные размеры отображения img в котором происходит кроп выделение, т.е. если изображение допустим 1800X1200 то чтобы не выползало за экран
- задаются размеры кропа (w,h), если выключен аспект ратио, то это будут максимальные размеры превью, иначе размер превью будет соответствовать этим размерам
- минимальные размеры кропа устанавливаются исходя из изображения, т.е. чтобы при посроении превью не было увеличения исходного изображения и следовательно ее пикселизации
- js превью отображет точь в точь картинку включая режим с выключенным aspect ratio, которая получиться после php ресайза
Вот еще реализация crop на mootools. Mooloos удобен тем что все его библиотеки зашиты в один js. В заголовке всего + одна строчка.

<script type="text/javascript" src="mootools.js"></script>
<script type="text/javascript" src="MooCrop.js"></script>

Несжатый MooCrop занимает 9K
UFO just landed and posted this here
Всё замечательно, кроме одного момента — можно подобрать ситуацию, когда мышь одновременно нажимает на квадратик и на уголок, после этого, не отпуская мышь, можно наблюдать забавные перемещения квадратика при ресайзе. Думаю, можно как-то отслеживать одновременность событий и реагировать только на одно из них.
Спасибо, занесено в баглист!
Девочка очень красивая
Для подавления выделения попробуйте в конце каждого mousemove ставить вот такую функцию, она универсальна для все браузеров, отбивает любые стандартные действия:

stopEvent: function (event){
if (event.preventDefault) {
event.preventDefault();
event.stopPropagation();
} else {
event.returnValue = false;
event.cancelBubble = true;
}
return false;
}
return stopEvent();

Я тоже делал такую штуку для одного проекта. Только я не кртинку уменьшал, а кадр увеличивал. Самый главный промах и у вас и у меня — выделение с помошью осветляющего региона. А ведь по хорошему имеено эта часть идет на превьюшку, а значит нужно засветлять или затемнять все что находится вокруг.
ООО! Спасибо большое, попробую.
Про подавление стандартного поведения знал, но не думал, что оно распространяется и на выделение.
Насчет проблемы - ИМХО, скорость и безглючность важнее описанного недостатка.
Не всегда ;) Бывает и наоборот.
Ой, ей только event еше передавать нужно, я верен что вы и сами догадались, но я на всякий случай ;)
Несколько лет назад делал подобную вещь (у меня двигался и ресайзился сам кроп). Код старый, уж строго не судите ;) Скоро я собираюсь эту вещь переписывать и модернизировать, а пока — просто как еще одинработающий пример...
Версия в работе лежит вот тут.
Выделение, у меня кстати блокировалось (на то время; в фф3 это уже не работает нормально), можете в принципе глянуть, там все было как-то просто...
На самом деле у вас один из самых лучших вариантов. Еще бы выделение было с помошью полупрозрачности, а не тупо цвет. Или просто обводка.
Ну просто этот вариант, в отличие от Y и jQ вариантов, продавался. Но, учитывая давность и срок (2 дня), внутри он далек от идеала, а руки всё не доходили доработать...
<оффтоп>Я, как запущу "сайт себя" и проведу ревизию кода, выложу несколько хороших (имхо ;) ) штук...</оффтоп>
Насчет "тупо цвет" не совсем понял — там сделан фильтр для ие и полупрозрачный пнг. Это не та полупрозрачность? ;) Впрочем, до кондиции это доводится легким изменением стиля.
Вместо png лучше для однородного фона использовать opacity, вот у меня например этот png не загрузился, и я увидел сплошной цвет :)
я знаю) это было давно, опера тогда еще не очень много умела, а прозрачность в фф была в виде -moz-opacity, и я не решился это использовать )
Да, с выделением в опере всё равно проблемы. А вот фаербаг довольно быстро досчитал количество ошибок до 1000 :)
Я не понял, а где здесь собственно кроп? Ресайз увидел, ну рамочка есть, да. А файла на исходе откропленного то нет.
посмотреть профиль bur адский человек, респект очередной раз!
Пока по проблемам нечего сказать, фф2 (мак) работает отлично!
Полезная штуковина.
Небольшая мелочь - на мой вкус уместней было бы полупрозрачностью приглушить то, что не попадет в кроп, а выделение наоборот оставить контрастным.
UFO just landed and posted this here
Как-то всё глючит не по детски и ничего не работает :)
UFO just landed and posted this here
Изображение скачет влево-вправо, и у него еще есть фантом :)
А то, что не ресайзит без серверной части, оно и понятно :)
Показанные примеры - не смог изменить размер.

Судя по описанию, не jQuery - лишний код.

Проще повторить идею на jQuery + jQuery UI (draggable + resizable + opacity), чем использовать код автора.
Кстати, зпа информацию о размере выделенной области в её краю - громадный респект. удобная фича.
Глюк в фаерфоксе. Если взятья очень близко к раю, а потом потянуть мышь к этому краю, захват как-бы «соскочит». Вы mousemove не на document сделали, что-ли?
Прошу прощения, оказывается в ФФ3б5 вообще каждое второе перемешение области выделения не работает, безотносительно места нажатия. Проверьте пожалуйста в ФФ3рс2 более внимательно, вдруг глюк все-же не в бетте.
Впечатляет. Пригодится. Спасибо.
В коллекцию. Здесь уже был аналогичный скрипт.
Однако, Ваш глючит, после некоторых перемещений по onmove начинают сыпаться ошибки.
Так и не смог повторить ваш баг. Ну не глючит он у меня, хоть тресни. Какой браузер-то?
в третьем примере X и Y кропа попутаны ;)
Спасибо, поправлю.
А поворот пожно реализовать на произвольный градус?
Вообще можно, но такой задачи не ставилось. Смотрите в сторону VML & Canvas.
UFO just landed and posted this here
Я не совсем понял: фотография обязательно должна предварительно звгружаться на сервер или можно всю обработку делать локально на компе клиента, а на сервер загружать готовую фотографию после кропа и ресайза?
Непосредственное изменение размеров и масштаба изображения с получением новой картинки происходит на сервере. JavaScript может только отдать нужные координаты.
Поскольку юзеры убеждены, что 5-мегапиксельный фотик это вчерашний день, а 8 мегапикселей это вэригуд, а 16 - еще лучше, только денег нет, - размер джипегов, из которых они пытаются сделать аватар, нередко превышает 1 - 1,5 мегабайта. А на серваке эти монстры раскладываются по битам, для обработки, и занимают в несколько раз больший обьем. При большом количестве посетителей нагрузка на сервер получается несоизмерима с пользой такого сервиса. Проще надавать ссылок на бесплатные фоторедакторы, чтобы грузили готовые фотки приемлемого размера. Или найти плагин к браузеру, умеющий это делать.
Респект автору!
Решился взяться за доделку. Да не буду убиенным:
http://i-web.com.ua/fc-cropresize2.zip
в IE8b2 кроп уже непрозрачный, а в линуксовом FF3.0.1 перетаскивание работает через раз

интересная штука выявилась с изменением вёрстки страницы, на которой я тестил вашу разработку:
при первой загрузке страницы и кроп и картинка правого нижнего угла не позиционируются на своих местах, но после обновления страницы всё становится куда следует (это и в Win и в Linux).

а так вещь полезная и лаконичная, одобрям-с :)
Автор, удалось ли реализовать пункты раздела FUTURE?

О планах
* Сделать возможность ресайза области кропа
* Проработать ресайз изображения в сторону увеличения
* То, что вы предложите :-)


Каково текущее состояние скрипта fc-cropresizer?
Sign up to leave a comment.

Articles