Прозорість до непідготовленого RGB + Alpha


16

У мене прозорий шар у Photoshop CS5 (тому внутрішньо він, швидше за все, зберігається як непідготовлений компонент RGB плюс альфа-компонент на піксель).

Тепер я хочу перетворити це на непрозорий шар (просто непідготовлений RGB) + альфа-маску. результат повинен виглядати так само, як оригінал.

Я не можу просто лежати в основі прозорого шару з чорним, приймати виділення з нього як маску і зливати шари, тому що це призведе до перемноження альфа в значення RGB.

Сподіваюся, ви зрозуміли проблему і зможете дати мені її вирішення.

Як альтернативне пояснення: Я хочу, щоб ОПРАВНИЙ процес цього:

  1. створити новий шар і вставити будь-яке зображення
  2. створити маску з градієнтом білого до чорного
  3. нанести шар маски

Пояснення зображень:

Стан A: введіть тут опис зображення

Стан B: введіть тут опис зображення


ВАЖЛИВО: шар для цього прикладу є повністю постійним червоним - але ви можете придумати будь-яке довільне зображення замість постійного червоного. так - щоб перейти від стану А до стану Б, потрібно просто нанести маску шару.

Я хочу знати, як перейти зі штату Б до штату А.


Цікаво, чи може тут допомогти якийсь тип маскуючого плагіна. Інформація про непрозорість існує, це лише питання, як її отримати. Отримання інформації на рівні пікселів не існує в сценаріях API (принаймні, в Applescript, але всі підтримувані мови, схоже, узгоджуються з тим, що я бачив).
Філіп Реган

Відповіді:


6

Я цілком розумію твій біль. Ось моє рішення :)
Витягніть Альфа як маскування
Ось що це робить:

введіть тут опис зображення Редагувати:
введіть тут опис зображення
Я сподіваюся, що це допомагає :)


Ого, круто .. Звичайно, потрібно використовувати дії, щоб зробити це прийнятним процесом.
Ars Magika

5

Неправильно! Все неправильно!

Я обдурив себе, і ви також в процесі: Те, що я створив, - це дійсно попередньо множинне зображення - не попередньо промальоване чорним, а білим. Я залишаю цю відповідь для інших, щоб будувати на ній.


Мені вдалося це зробити так:

  1. Витягніть із зображення справжні канали RGBA
  2. Використовуйте їх для створення нового образу

І ось як я це зробив:

тестове зображення

Це тестове зображення, яке я використав. Вид каналу в PS виглядає приблизно так:

канали

Вибравши окремі канали, я скопіював їх в окремі шари, потім вирівняв їх білим фоном, щоб отримати чорно-білу карту, як показано тут:

bw-карта

Я також витягнув прозорість вихідного зображення в шар, клацнувши командою клацання по мініатюрі шару і заповнивши новий шар виділенням.

Тоді я створив нове зображення з тими ж розмірами і без прозорості. Потім я вставив створені мною шари RGB у відповідні канали нового зображення:

канали нового зображення

На останньому кроці я "розкрутив" шар подвійним клацанням і створив маску шару, використовуючи альфа-шар з вихідного зображення, в результаті чого:

шарова маска


Як було сказано вище, це не створює непередбаченого зображення, оскільки мій приклад повинен був виглядати так, щоб він не був попередньо помножений:

правильна версія

Хтось розумніший за мене і може це створити? Я вважаю, що без розширеного сценарію на основі пікселів це неможливо в Photoshop.


5

Гаразд - я створив простий фільтр pixelBender, який можна використовувати з плагіном Photoshop PixelBender (http://labs.adobe.com/downloads/pixelbenderplugin.html), щоб зняти прозорість шару. ось це: http://neo.cycovery.com/removeTransparency.pbk


2

Виходячи з наданих відповідей та ваших коментарів, коротка відповідь: ви не можете робити те, що хочете. Після нанесення маски шар виводиться на поверхню, і невидимі дані зображення викидаються.

Редагувати:

Я зробив декілька зразкових файлів png, а потім використав php для маніпулювання ними (вихідний код нижче).

Якщо я створю png із випадковою прозорістю і зберігаю, поки у шарі є маска, то 100% чіткі ділянки (наприклад, із інструменту box) показують білим кольором, чи підтримується альфа-підтримка чи ні. Градієнти, які містять деяку кількість прозорості на 100%, не відображаються при відключенні альфа.

Якщо я застосую маску шару (назавжди), а потім створять png, тоді php подає початкове зображення, якщо альфа вимкнено.

Тож потенційною проблемою для цього є пошук програмного пакету, який не підтримує альфа-PNG, і збереження його звідти. Що стосується відновлення оригінальної маски, я цього ще не розглядав.

Обидва зразки коду є доказовою концепцією та низькою швидкістю.

<?php

$im = imagecreatefrompng('./images/alphatest_nolayer.png');
$enable_alpha = 0;  //set to 0 to disable aplha

if ($enable_alpha) {
    imagealphablending($im, false);
    imagesavealpha($im, true);
}

header('Content-Type: image/png');
imagepng($im);

imagedestroy($im);

?>

Для вилучення альфа (зауважте: php має обмеження GD на рівні 128 альфа, а не 256), тому деяка точність втрачається. Альфа можна розтягнути до 256 за допомогою інструменту рівнів)

<?php

$im = imagecreatefrompng('./images/alphatest_nolayer.png');
$w = imagesx($im);
$h = imagesy($im);

$om = imagecreatetruecolor($w,$h);

for ($x = 0; $x < $w; $x++) {
    for ($y = 0; $y < $h; $y++) {
        $rgb = imagecolorat($im, $x, $y);
        $colors = imagecolorsforindex($im,  $rgb);

        $orgb = imagecolorallocate($om,$colors['alpha'],$colors['alpha'],$colors['alpha']);
        imagesetpixel($om,$x,$y,$orgb);
    }
}

header('Content-Type: image/png');
imagepng($om);

imagedestroy($om);
imagedestroy($im);

?>

але дані все ще є. це RGB частина піксельних даних RGBA. повинен бути спосіб витягнути його
Мат

1
чому ви не надаєте прикладний файл у реальному світі? У своєму запитанні ви чітко показуєте один шар з прозорою областю і без маски, а також не вказує альфа-канал.
horatio

.png має заздалегідь визначений колір палітри для 100% прозорого чорного кольору, який можна використовувати (за допомогою фотошопу), коли буде 100% прозорість лише для того, щоб зберегти деякий диск.
Ars Magika

Не впевнений, що це насправді відповідає на питання - здається, специфічним для обробки PNG.
e100

2

Я дізнався, як це зробити в GIMP, можливо, це не PhotoShop, але принаймні це зробить те, що ви просите. (Як я все-таки інтерпретую це;))

  • Відкрийте зображення в GIMP.
  • Натисніть з правої MouseButton на шар в шарах коробки
  • У контекстному меню виберіть " Додати маску шару "
  • У наступному меню виберіть " Передати шари альфа-каналу " та натисніть кнопку " Додати "

На даний момент у вас залишилося зображення з маскою альфа-каналу.

Ви можете піти на крок далі:

  • Клацніть правою кнопкою миші маску шару та виберіть " видалити маску шару "
  • Тепер ви залишили зображення без альфа-маски.

Також є кліп на YouTube, як це зробити.


Роберто: Так, ви знайшли відповідь. Саме цього ми хочемо, і це безкоштовно !! Я використаю відео, яке ви опублікували, як відповідь для будь-якої іншої особи, яка запитує те саме (дотепер можливе лише нескінченне копіювання шару в PS)

1

Це здається приголомшливо складним. Якщо я правильно розумію оригінальне запитання та різні його роз’яснення, проблема полягає в тому, щоб взяти будь-яке довільне зображення, що містить прозорість, і зробити його повністю непрозорим, а потім застосувати вихідні значення альфа як маску, щоб відтворити оригінальний вигляд.

Якщо це питання, відповідь дуже проста, якщо трохи нудна.

  1. Скопіюйте шар 10 разів. Прозорість "заповнить" у складеному зображенні.

  2. Об’єднайте всі копії (але НЕ оригінальний шар , який вам знадобиться для останніх кроків).

  3. Повторіть кроки 1 і 2 з об'єднаним шаром, після чого виконайте це ще раз. На даний момент усі пікселі, які були менш ніж на 100% прозорі, тепер на 100% непрозорі (якщо є якісь збитки, просто повторіть процес, поки їх немає). Це стільки інформації про зображення, скільки можливо відновити.

  4. Ctl / Cmd - Клацніть на мініатюрі оригінального шару, щоб завантажити його прозорість.

  5. Вибравши новий непрозорий шар, натисніть значок маски шару на панелі шарів.


0

Гаразд, це насправді досить просто (ви повинні ігнорувати крокуючих мурашок)

Створіть новий шар і заповніть його повністю будь-яким кольором, який ви використовуєте (якщо вибірка взяла його з мертвого центру першого зображення)

введіть тут опис зображення

введіть тут опис зображення

Потім візьміть своє перше зображення та CTRL + Клацніть мініатюру шару, ви побачите деяку версію цього: введіть тут опис зображення

Як я вже говорив: ігноруючи крокуючих мурашок, оперення набуває чинності автоматично в CS5.

Потім переконайтеся, що вибрано заповнений шар, і натисніть кнопку маски:

введіть тут опис зображення

Потім просто захойте нижній шар, і вам слід зробити це, з точним ефектом, який ви домагаєтеся :)

введіть тут опис зображення

І ось як повернути інженеру застосовану маску в CS5. Функція вибору шару CS5 досить розвинена, тому більшу частину часу просто ігноруйте крокуючих мурашок, оскільки вони не показують правильно жодного оперення, яке буде продовжуватися під час вибору :)

Сподіваюся, це виходить для вас.


дякую за вашу відповідь, але це не те, що я шукаю - як пояснив, постійний червоний колір саме для цього прикладу! це може бути БУДЬ-яке зображення (не лише постійний колір заливки) - а з корсезу у мене немає оригінального непрозорого зображення
Мат

Добре, ви повинні розмістити своє зображення у своєму запитанні. Якщо ви публікуєте постійну заливку, ми будемо відповідати на основі постійної заливки. Спробуйте використати методи, хоча вибір CS5 дуже розвинений, це може вас здивувати. Це зробив мене.
Кайл

Звичайно, я знаю про ці методи відбору! Проблема полягає в тому, як отримати доступ до RGB лише частини прозорого шару
Мат

Над шарами є три вкладки, клацніть канали. Там у вас є червона, зелена, синя та шарова маска. Можливо, це те, що ти шукаєш?
Кайл

але шар, як у neo.cycovery.com/alpha_prob2.jpg , не відображає альфа-канал - натомість він просто відображає канали RG і B з прозорістю, яка вже застосована
Мат

0

Що ви хочете зробити, це легко зробити плагіном, як плагін Photofreebies "Видалити прозорість". Спочатку клацніть по шару, щоб вибрати прозорі пікселі, а потім збережіть цю інформацію про прозорість у новому каналі, щоб зберегти її. Потім ви застосовуєте фільтр "Видалити прозорість", і ви бачите "приховані" пікселі у вашому шарі непрозорими (досить цікаво побачити, як Photoshop розміщує ваші 100% прозорі пікселі BTW). Я дуже бажаю роками, щоб це було вбудовано у Photoshop споконвічно, але, на жаль, занадто просунуте, я думаю.

На жаль, я не можу знайти сумісну з Photoshop CS6 версію такого плагіна для Mac, тому я зараз застряг. GraphicConverter теж може це зробити (Видалити альфа-канал).


0

Ось відповідь:

  1. Складіть шар із потрібних речей на зображенні.

  2. Зробіть вибір для потрібного альфа-каналу.

  3. Зробіть вибір "маскою шару" для шару зображення.

  4. Клацніть правою кнопкою миші маску шару та «Застосувати маску шару».

Тепер магія починається:

  1. Перейдіть до "Шару", а внизу: "Матування", потім виберіть "Видалити чорний матовий".

Будь ласка!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.