Я вижу TypeError
при использовании ключевых слов цвета (например, transparent
, в отличие от значений rgb()
), так как сопоставление с регулярным выражением "step" в LinearGradientContainer
в этом случае всегда будет возвращать null
( см. эту строку ).
Не могли бы вы обновить регулярное выражение, чтобы оно работало должным образом как с ключевыми словами [a-z]+
color, так и с функциональной нотацией rgb()
/ rgba()
? Или вы были бы открыты для запроса на перенос, который делает именно это? (Я могу даже добавить поддержку hsl()
/ hsla()
в регулярное выражение, если хотите ...) Спасибо!
Запрос на вытягивание с исправлением и тестами для его поддержки было бы отлично!
Попробую взглянуть на этих выходных. Примечание для себя:
https://developer.mozilla.org/docs/Web/CSS/color_value
https://developer.mozilla.org/docs/Web/CSS/gradient
http://stackoverflow.com/a/12456392/357774
Что касается реализации вставки в стиле границы, необходимо также получить общий синтаксический анализ для цветов, поскольку он должен затемнять / осветлять цвета на определенный процент. С этим исправлением градиента, если есть необходимость в синтаксическом анализе цветов в общий формат, это также может быть полезно с border-style: inset.
Например, если какой-либо цвет (шестнадцатеричный, rgb, rgba, hls, hlsa, предопределенное имя, такое как «красный», «зеленый» и т. Д.) Может быть проанализирован в объект Color с определенными значениями r, g, b и a, он будет значительно упростить реализацию вставки границ.
Согласились с тем, что общий синтаксический анализ / представление цвета можно и нужно использовать повторно. Буду иметь в виду и, наверное, возникнут вопросы.
У меня не было возможности взглянуть на это на выходных, возможно / надеюсь, у него будет время завтра.
Есть новости по этому поводу?
Эээ, извините, еще нет. : / Был перегружен и имел ограниченные вычислительные ресурсы, хотя я установил некоторые тесты локально (еще ничего не реализовал).
Я добавил базовый синтаксический анализ цвета (до сих пор named, rgb, rgba, hex3 и hex6) и изменил все способы использования цвета, чтобы использовать их. Регулярные выражения градиента еще не обновлены.
См. Https://github.com/niklasvh/html2canvas/commit/313c227a1fed416331978e365ef82000ea7f7aa5
Отлично! В эти выходные я посмотрю, как обновить эти регулярные выражения.
@niklasvh Можете ли вы взглянуть на коммит, который я только что сделал в своей ветке (359ee8b), и сообщить мне, что вы думаете? Я удалю свои лишние комментарии и скоро добавлю тесты для названий цветов, но не могли бы вы также взглянуть на другое изменение?
Я исправил синтаксический анализ направления для Firefox, поэтому некоторые линейные градиенты, которые раньше не отображались правильно, теперь должны работать. Вы можете увидеть ручной тест, который я только что временно вставил в tests/lineargradients_manual.html
(в основном копию tests/cases/background/linear-gradient.html
). Я полагаю, что смогу проверить повышение точности и отсутствие регрессов в других браузерах / версиях после запуска тестов на селен, но не могли бы вы убедиться, что это нормально? Я подозреваю, что повышение точности рендеринга можно увидеть только при сравнении более поздних версий FF, чем те, которые были протестированы. (Похоже, что единственная протестированная версия Firefox - 15 ??)
Хм, задержите эту мысль, возможно, я сделал что-то странное, квадраты на моем домашнем компьютере теперь в основном черные ...
Ах, нет, похоже, 498527918c3324dce77260057bc47c280cc3324f - это проблема с фиксацией, мои данные выглядят нормально. : sweat_smile:
Что произойдет, если процент будет отличным от 100% или 0%?
На данный момент он не поддерживает произвольные проценты (оставляет их равными 50% по умолчанию), но я могу добавить это достаточно легко. ( Обновление : добавлена поддержка произвольных процентов: 6af1874dc04c81d1aba5d6e8e6c8ef69681a2e49.)
В чем я не уверен, так это в непроцентных длинах, которые могут быть в px
, em
, rem
, ex
, cm
, mm
, in
, pc
, pt
и т.д ... Я еще не искал это в коде, но у вас уже есть способ обрабатывать / преобразовывать длины различных единиц? (Если нет, должно ли это стать частью этой функции или ее следует реализовать отдельно?)
Абсолютные длины должны быть легко реализованы, но я думаю, что пикселей должно быть достаточно для начала.
@niklasvh У меня ветку fix-firefox-gradients
и прокомментировать, прежде чем я сделаю запрос на перенос?
Я должен отметить, что, хотя регулярные выражения могут анализировать длину пикселей (как в начальных положениях градиента, так и в положениях остановки цвета), по-прежнему нет поддержки для их правильного рендеринга. Я думаю, что самый простой способ добавить поддержку абсолютной длины - это включить информацию о границах с imageData
которая передается в конструкторы градиентных контейнеров, а затем преобразовать их в проценты. Однако это, вероятно, должно быть выделено в отдельный запрос на перенос.
Спасибо! Вскоре мы рассмотрим это подробнее и свяжемся с вами с любыми отзывами, которые у меня могут быть.
Есть ли в этом прогресс? Это еще нужно!
Я готов сделать пул-реквест, если одобрить подход, который я использовал в своей ветке.
: +1: Я только что столкнулся с этим:
TypeError: Cannot read property '1' of null at GradientContainer.<anonymous> (http://localhost:8100/all.js:34496:44)
at Array.map (native)
at GradientContainer.LinearGradientContainer (http://localhost:8100/all.js:34493:66)
at ImageLoader.279.ImageLoader.loadImage (http://localhost:8100/all.js:34367:16)
at ImageLoader.<anonymous> (http://localhost:8100/all.js:34339:46)
at Array.forEach (native)
at ImageLoader.279.ImageLoader.addImage (http://localhost:8100/all.js:34337:23)
at Array.forEach (native)
at ImageLoader.279.ImageLoader.findBackgroundImage (http://localhost:8100/all.js:34331:71)
at 295.exports.bind (http://localhost:8100/all.js:36357:25)
Привет, @niklasvh! Спасибо за исправление # 526.
Вы когда-нибудь видели мою ветку fix-firefox-gradients
? Я бы перебазировал свою ветку (и исправил любые новые конфликты), прежде чем делать PR, но, пожалуйста, дайте мне знать, будет ли PR по-прежнему приветствоваться. (Как вы думаете, сможете ли вы просмотреть его в разумные сроки?) Спасибо!
@usmonster Нет, извини, я это пропустил. Одна потенциальная проблема, о которой я подумал при выполнении этого исправления, заключается в том, что если браузер решит не преобразовывать именованные цвета, такие как red
или blue
в соответствующие rgb
или rgba
values, простой учет transparent
не сработает. Модуль Color
учитывает все различные цветовые вариации, но я не совсем доволен тем, как выполняется текущий синтаксический анализ в master
для начала.
Есть идеи, как обрабатывать названные цвета?
@niklasvh , поиск и нормализация, которые уже выполнены конструктором Color
должны быть достаточными для обработки всех названных цветов, если я что-то не понял?
Кроме того, я исправил регулярные выражения, используемые для анализа цветов и линейных градиентов, чтобы сделать их более надежными, правильными и производительными, поэтому я не думаю, что именованные цвета должны быть проблемой. Что вы думаете?
@usmonster Вы правы, я имел в виду https://github.com/niklasvh/html2canvas/compare/master...usmonster : fix-firefox-gradient # diff-48b5afb6985c457b9f79fcca1cfb499dR21, который, как я заметил, учитывает названные цвета, так что никаких проблем. В противном случае все выглядит хорошо, не могли бы вы перебазировать и выставить пул-реквест?
Без проблем! Постараюсь заглянуть в ближайшие пару дней - я вроде как пропустил свое окно выходных. : /
@niklasvh См. # 708. :)
Я получил «TypeError: colorStopMatch is null» в html2canvas.js: 1454: 13 в FireFox. В Chrome это работает.
Привет @ Observer999! Этот вопрос закрыт. Найдите аналогичную открытую проблему или создайте новую проблему со ссылкой на страницу, которая воспроизводит возникшую у вас проблему. (Пожалуйста, также укажите там, в какой версии Firefox вы тестировали.) Я могу представить, что это может иметь какое-то отношение к TODO в коде .. Спасибо!
@usmonster @niklasvh Привет, ребята, я знаю, что эта проблема закрыта, но я использую последнюю версию html2canvas и получаю ту же ошибку в последней версии Chrome, но в Firefox она работает.
html2canvas.js: formatted: 1377 Uncaught (в обещании) TypeError: невозможно прочитать свойство '1', равное нулю
в LinearGradientContainer.
в Array.map (
в новом LinearGradientContainer (html2canvas.js: форматировано: 1374)
в ImageLoader.loadImage (html2canvas.js: форматировано: 1256)
в ImageLoader.
в Array.forEach (
в ImageLoader.
в Array.forEach (
в ImageLoader.findBackgroundImage (html2canvas.js: форматировано: 1219)
в html2canvas.js: форматирование: 2563