Как покрасить картинку css
Перейти к содержимому

Как покрасить картинку css

  • автор:

Наложение текста поверх картинок на сайте с разметкой Markdown

Вы используете Internet Explorer устаревшей и не поддерживаемой более версии. Чтобы не было проблем с отображением сайтов или форумов обновите его до версии 7.0 или более новой. Ещё лучше — поставьте браузер Opera или Mozilla Firefox.

Обсудить и задать вопросы можно в этой теме.

Balancer
администратор

Очередной пост в рамках «возвращения на форум», чтобы не растекаться по другим ресурсам. Может, кому-то пригодится по-мелочи.

Жена на сайте делает ссылки на разделы в виде картинок. И накладывает на них надписи вручную в графическом редакторе:

Сейчас ей, похоже, надоело и она спросила, нельзя ли это как-то автоматизировать 🙂

Пишет страницы она в Grav’е в разметке Markdown . Понятно, что при этом можно делать вставки на чистом HTML и написать что угодно, но это не спортивно! Мне давно интересно реализовывать что-то расширенное в рамках синтаксиса и идеологии Markdown. Кстати, этот пост эксперимента ради как раз на Markdown пишется. Форум его уже неплохо поддерживает, кроме ряда привычных многим фишек, типа сниппетов ссылок и кеширования внешних картинок.

Картинки в Markdown вставляются с таким синтаксисом:

![](http://ссылка) 

Или, в неурезанном варианте:

![Alt-текст](http://ссылка) 

Ага! Первое же, что приходит в голову, использовать Alt-текст для визуального вывода поверх картинки. Ну и сама картинка может быть произвольного формата, а выводить нужно в фиксированном размере, в нашем случае 250x200px. Укажем всю эту обработку, задав CSS-класс картинки:

![Лабораторные животные](lab-mouse.jpg)

Транслируется оно в HTML вида:

Оформление

Сперва опишем лимит размера картинки. Делаем её без полей, вписывая и обрезая лишнее в 250×500. Это сегодня совсем просто:

img.cover

А вот дальше — сложнее. Вытащить поле alt из img средствами CSS невозможно. Нужно переходить к JavaScript. На том же jQuery поле alt достаётся в одно действие. И, раз мы уже это делаем, то оформим картинку с подписью в рамках современных стандартов. Сегодня это рекомендуется делать примерно так:

 
Картинка
Заголовок картинки
$('img.cover').each(function() < var img=$(this); var alt = img.attr('alt'); img.wrap(""+alt+""); >); 

Готово. Теперь после загрузки страницы текст из поля alt рисуется под картинкой в виде:

 
Лабораторные животные
Лабораторные животные

Осталось только раскрасить надпись и наложить её поверх картинки:

figure.cover < position: relative; width: fit-content; display: inline-block; >figure.cover figcaption

Результат:

  • Balancer [08.12.2018 14:19]: Редактирование параметров темы
  • VAS [11.01.2022 23:54]: Предупреждение пользователю: wicihiy#11.01.22 12:44
  • VAS [11.01.2022 23:55]: Перенос сообщений в Спам на форуме
  • Balancer [08.12.2018 14:19]: Редактирование параметров темы
  • VAS [11.01.2022 23:54]: Предупреждение пользователю: wicihiy#11.01.22 12:44
  • VAS [11.01.2022 23:55]: Перенос сообщений в Спам на форуме
  • Все действия над темой

Copyright © Balancer 1997..2024
Создано 08.12.2018
Связь с владельцами и администрацией сайта: anonisimov@gmail.com, rwasp1957@yandex.ru и admin@balancer.ru.

Color overlay с помощью CSS

Есть цветные логотипы в png с прозрачными областями. Нужно добиться аналогичного фотошопу результата Color Overlay слоя. При ховере на картинку отображать её настоящие цвета и чтобы это было через анимацию. В браузерах, где это не может работать, должны отображаться полноцветные картинки. Семантически-корректно, тег img, без мусора в разметке.

Сначала демка результата:

Первым делом в голову приходит использовать CSS фильтры. Хорошо, но как покрасить голубой и красный логотип в один цвет с помощью фильтра? Профильтрованный через hue-rotate синий цвет даст зеленый, например, а красный — коричневый (вообще, конечно другие, но не важно). Сложно.

Пойдем по порядку, сначала нужно увести все цвета в черный:

Получилось, но теперь hue-rotate уже не поможет — абсолютный черный останется абсолютным черным. Тут даже не нужно обладать глубокими знаниями о работе HSL представлении — вращение черного цвета на любой градус даст черный цвет. Беда.

Надо немного вернуть, чтобы можно было манипулировать цветом. Еще есть opacity, но не то, которое свойство, а которое является функцией для свойства filter . Принимает такие же значения. Добавим:

filter: brightness(0) opacity(0.5);

Значение для него возьмем случайное, пока просто для проверки. Как будто бы нам нужна некая половина от черного, это ерунда конечно, но попробуем. Проверяем экранной пипеткой, что получилось. Картинка стала светлее, но значения всех каналов одинаковые, это говорит о том, что hue-rotate все равно работать не будет. Звучит, как будто бы пора делать два набора логотипов разных цветов и успокоиться.

Есть еще один фильтр, который в этой ситуации очень поможет, хоть и логически будет использован неправильно. Мы можем сделать заливку цветом, с помощью фильтра drop-shadow . Если поставить нулевой сдвиг и размер, то тень будет почти на том же месте, что и объект (сама картинка) от которого она отбрасывается. Ладно, пробуем.

Допустим, нужно получить цвет заливки #00f . Поставив его цветом тени, мы не получим цвет заливки #00f , потому что opacity(0.5) осветлит его. Дальше самое интересное: добиться путем регулировки непрозрачности и цвета тени необходимого цвета заливки изображения. В первую очередь нужно руководствоваться тем, что opacity сделает цвет светлее, поэтому значения RGB должны быть меньше, чем значения цвета, которого мы добиваемся.

Методом подбора значений получилось добиться цвета заливки #9fa3a6 . Для картинок, позади которых белый фон, формула этого цвета будет такая:

filter: brightness(0) opacity(0.22) drop-shadow(0 0 0 rgb(21, 43, 63));

Ладно, есть проблемы, конечно:

  1. Зависимость от цвета фона, на котором лежит изображение. На темном фоне значения для цвета тени придется рассчитывать заново. На неоднородном фоне вообще не получится добиться эффекта.
  2. Неприятный эффект при использовании анимировании свойства filter . В какой-то момент кажется, что цвет уходит в слишком темный.

Как покрасить картинку css

На этом шаге мы рассмотрим инструменты для решения указанной задачи .

  • Active и Normal — компонент активен (окно находится в фокусе ввода);
  • Disabled (значение 1) — компонент недоступен;
  • Inactive (значение 2) — компонент неактивен (окно находится вне фокуса ввода).

Получить текущую палитру компонента позволяет его метод palette() . Чтобы изменить цвет для какой-либо роли и состояния, следует воспользоваться методом setColor() класса QPalette . Формат метода:

setColor ([Состояние>, ]Роль>, Цвет>)

В параметре < Роль >указывается, для какого элемента изменяется цвет. Например, атрибут Window (или Background ) изменяет цвет фона, a WindowText (или Foreground ) — цвет текста. Полный список атрибутов имеется в документации по классу QPalette (см. https://doc.qt.io/qt-5/qpalette.html ).

В параметре < Цвет >указывается цвет элемента. В качестве значения можно указать атрибут из класса QtCore.Qt (например, black , white и т. д.) или экземпляр класса QColor (например, QColor(«red») , QColor(«#ff0000») , QColor(255, 0, 0) и др.).

После настройки палитры необходимо вызвать метод setPalette() компонента и передать этому методу измененный объект палитры. Следует помнить, что компоненты-потомки по умолчанию имеют прозрачный фон и не перерисовываются автоматически. Чтобы включить перерисовку, необходимо передать значение True методу setAutoFillBackground() окна.

Изменить цвет фона можно также с помощью CSS -атрибута background-соlor . Для этого следует передать таблицу стилей в метод setStyleSheet() компонента. Таблицы стилей могут быть внешними (подключение через командную строку), установленными на уровне приложения (с помощью метода setStyleSheet() класса QApplication ) или установленными на уровне компонента (с помощью метода setStyleSheet() класса QWidget ). Атрибуты, установленные последними, обычно перекрывают значения аналогичных атрибутов, указанных ранее. Если вы занимались Web -программированием, то CSS вам уже знаком, а если нет, то придется дополнительно изучить HTML и CSS .

Создадим окно с надписью. Для активного окна установим зеленый цвет, а для неактивного — красный. Цвет фона надписи сделаем белым. Для изменения фона окна используем палитру, а для изменения цвета фона надписи — CSS -атрибут background-соlor .

# -*- coding: utf-8 -*- from PyQt5 import QtCore, QtGui, QtWidgets import sys app = QtWidgets.QApplication(sys.argv) window = QtWidgets.QWidget() window.setWindowTitle("Изменение цвета фона окна") window.resize(300, 100) pal = window.palette() pal.setColor(QtGui.QPalette.Normal, QtGui.QPalette.Window, QtGui.QColor("#008800")) pal.setColor(QtGui.QPalette.Inactive, QtGui.QPalette.Window, QtGui.QColor("#ff0000")) window.setPalette(pal) label = QtWidgets.QLabel("Текст надписи") label.setAlignment(QtCore.Qt.AlignHCenter) label.setStyleSheet("background-color: #ffffff;") label.setAutoFillBackground(True) vbox = QtWidgets.QVBoxLayout() vbox.addWidget(label) window.setLayout(vbox) window.show() sys.exit(app.exec_())

Архив с файлом можно взять здесь.

Результат работы приложения изображен на рисунке 1.

Рис.1. Внешний вид активного (вверху) и неактивного (внизу) окна

На следующем шаге мы рассмотрим вывод изображения в качестве фона .

Перекрашивание графического объекта

В Illustrator можно моментально подобрать любые нужные вам оттенки — с помощью цветового круга, библиотеки предустановленных цветовых тем или инструмента «Палитра цветовых тем». Экспериментируйте с цветами, подбирайте идеальные оттенки и применяйте их к своей работе одним нажатием кнопки.

Прежде чем начать, изучите функцию Генеративное перекрашивание . Эта функция на базе семейства моделей генеративного ИИ для творчества Adobe Firefly помогает вам быстро перекрасить ваши работы с помощью простого текстового запроса!

Попробуйте в приложении!

Мгновенно применяйте любую цветовую тему к своим работам в Illustrator.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *