За последние 24 часа нас посетили 22233 программиста и 1058 роботов. Сейчас ищут 676 программистов ...

Цвет пикселя картинки

Тема в разделе "JavaScript и AJAX", создана пользователем TeslaFeo, 21 май 2018.

  1. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.989
    Симпатии:
    759
    Приветствую Вас, уважаемые форумчане!
    Необходимо при клике по картинке получить цвет пикселя, по которому был произведен клик.
    Может быть кто-то встречал готовое решение?
     
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.237
    Адрес:
    там-сям
    уверен слово colorpicker в гугле выдаст стопицот готовых решений. но js не моё, советовать ничего не буду.
     
  3. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.989
    Симпатии:
    759
    colorpicker - это выбор цвета из палитры.
    мне нужна пипетка, и без canvas её никак не реализовать, на сколько понимаю.
    готового не нашел пока-что.
    --- Добавлено ---
    вот это отметнул сначала в поисках более простого решения и забыл)
    походу это и нужно изучать)
     
  4. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.237
    Адрес:
    там-сям
    https://stackoverflow.com/a/21457424/272885
    > Using a technique called Browser Timing Attack, it is possible to (sort of) determine the color of any pixel, even on iframes.
    --- Добавлено ---
    Ты же сказал надо не с палитры, а сам приводишь пример с фотографии, то есть с ограниченной канвы.
    Да ещё с руселлер. Женя Попов фу.
     
    TeslaFeo нравится это.
  5. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    В песочнице работать не будет, поэтому собрал в архивчик.
    --- Добавлено ---
    CORS... сцучко.
     

    Вложения:

    • pixel.zip
      Размер файла:
      2,3 КБ
      Просмотров:
      6
    TeslaFeo нравится это.
  6. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.989
    Симпатии:
    759
    под палитрой подразумевал набор цветов.
    фу не фу, а вариант рабочий.
    и, сюдя по наличию англоязычных комментов в коде, вряд ли это его решение.

    @Deonis на твоё решение хром ругается почему-то. Особо не разбирался, но спасибо :)

    Есть еще один вопрос. Если изменить размер холста с помощью CSS (я давал 100% от контейнера), то почему-то картинка не правильно масштабируется и пипетка ведет себя не правильно (указывает не те цвета, над которыми находится).

    На эту тему ничего толкового не нагуглил и просто дал контейнеру overflow:hidden (этажикастыль!)
    Думается мне, что @Fell-x27 что-то знает об этом ибо был замечен в любви к JS в целом и канвасу в частности :)

    P. S. Вот и канвас потрогал :)
     
  7. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Протокол file:// тут не прокатит. Для Хрома http(s)
    Хоть это и не его скрипты, а только чужие переведенные материалы, но он умеет обосрать всё, к чему прикасается :D
    --- Добавлено ---
    Его можно сравнить с сапрогеном (гнилостной бактерией). От таких нужно беречь парное молоко ))
     
    #7 Deonis, 22 май 2018
    Последнее редактирование: 22 май 2018
  8. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.989
    Симпатии:
    759
    отвечаю на свой же вопрос.
    изменение размеров холста производится следущим образом:

    Код (Javascript):
    1. var canvas = document.getElementById('canv'); // тут наш холст
    2. canvas.width = 128;
    3. canvas.height = 128;
    обращаю Ваше внимание:
    1. Это делается не через встроенный объект элемента style (canvas.style.width).
    2. В качестве значений присваиваются целые числа, а не строки ('128px')
     
  9. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.155
    Симпатии:
    1.769
    Адрес:
    :сердА
    Потому что размер-то ты изменил, а количество пикселей на битмапе осталось прежним. Если у тебя раньше 100 пикселей занимали 100 пикселей в ширину, то теперь, грубо, у тебя 100 пикселей занимают 1000 пикселей в ширину. Стало быть, браузер должен либо тупо пиксель изображения "растягивать", либо интерполяцию делать. Это управляемо, кстати, через CSS. По умолчанию изображение интерполируется. После интерполяции видимое изображение только выглядит похожим на исходное. На деле, там уже другие пиксели, другие цвета.

    Иными словами, сколь ты битмап не масштабируй, в памяти он останется тем же, ты коверкаешь только его представление финальное. И пипетка работает с финальным представлением. Ты меняешь его размеры, но реальное разрешение у него не меняется. Это как с обычными картинками.
     
    Deonis и TeslaFeo нравится это.