Прозорість до непідготовленого 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.