Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Черный фон в прозрачных PNG при сохранении в JPG / 24 сообщений из 24, страница 1 из 1
31.01.2018, 17:30
    #39594219
Черный фон в прозрачных PNG при сохранении в JPG
Задача - любой графический добавляемый в программу файл уменьшается до нужных размеров и сохраняется в jpg
Все отлично, но с полупрозначными PNG на входе, на выходе они с черным фоном получаются.
Использую GDI+
В упрощенном виде код ниже, там сложнее все, но вот эта базовая штука не работает как надо для этого случая.

Перерыл все, наверняка в GDI какай-то штатная опция есть.
Помогите плиз


Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
GetEncoderClsid('image/jpeg', encoderClsid);
..
Input_for_png := TGPBitmap.Create(FromName);
out_height :=Input_for_png.GetHeight;
out_width :=Input_for_png.GetWidth;
Output_for_png :=TGPBitmap.Create(out_width,out_height{,PixelFormat32bppARGB});
g := TGPGraphics.Create(Output_for_png );

g.DrawImage(Input_for_png, MakeRect(0, 0, out_width, out_height),   0, 0,out_width, out_height, UnitPixel);

result:=Output_for_png.Save(ToName, encoderClsid,@encoderParameters)=OK;
...
Рейтинг: 0 / 0
31.01.2018, 17:33
    #39594224
Dimonka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Черный фон в прозрачных PNG при сохранении в JPG
В стандартном JPG поддержки прозрачности нет, поэтому фон становится того цвета, какой был у тебя в битмапе Input_for_png. Залей его белым цветом, если хочешь белый для прозрачных частей. Ну или шахматной клеткой как в фотошопе, чтобы подчеркнуть прозрачность.
...
Рейтинг: 0 / 0
31.01.2018, 17:34
    #39594226
LSV
LSV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Черный фон в прозрачных PNG при сохранении в JPG
Насколько помню, цвет прозрачности задается цветом нижнего левого пикселя.
Поэтому с JPG частые проблеммы, т.к. цвет этого пиксела в итоге выходит уникальным и прозрачности естественно нет.
...
Рейтинг: 0 / 0
31.01.2018, 17:38
    #39594230
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Черный фон в прозрачных PNG при сохранении в JPG
У тебя изначально чёрный JPEG. На нём ты рисуешь PNG картинку с прозрачностью.
Вопрос: какой цвет будет у результата в прозрачных местах?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
31.01.2018, 18:46
    #39594305
Соколинский Борис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Черный фон в прозрачных PNG при сохранении в JPG
Александр ЧулЗадача - любой графический добавляемый в программу файл уменьшается до нужных размеров и сохраняется в jpg Задача некорректная на уровне постановки.
JPЕG предназначен только для фотографий, и прозрачности там нет по определению.
Кроме того конверсия рисованием - не самый быстрый и корректно работающий способ.
...
Рейтинг: 0 / 0
31.01.2018, 18:53
    #39594316
white_nigger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Черный фон в прозрачных PNG при сохранении в JPG
Сама задача довольно чудная: сохранять PNG в JPEG, имхо - моветон. Что именно мешает сжать и хранить в PNG?
...
Рейтинг: 0 / 0
31.01.2018, 20:22
    #39594394
Dimonka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Черный фон в прозрачных PNG при сохранении в JPG
white_niggerСама задача довольно чудная: сохранять PNG в JPEG, имхо - моветон. Что именно мешает сжать и хранить в PNG? Боюсь, что у автора они уже сжаты в PNG. Так что надо решать поставленную задачу. :-)
...
Рейтинг: 0 / 0
31.01.2018, 21:03
    #39594410
Черный фон в прозрачных PNG при сохранении в JPG
Dimitry Sibiryakov,
Спасибо, помогло.
Для потомков, - лечится так

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
g: TGPGraphics;
SolidBrush: TGPSolidBrush;
in_img, out_img: TGPImage;

..
in_img := TGPImage.Create(FromName); // <-png с альфой
out_img :=TGPBitmap.Create(width,out_height);
g := TGPGraphics.Create(out_img);

 SolidBrush := TGPSolidBrush.Create(MakeColor(255,255, 255, 255));
 g.FillRectangle(solidBrush, 0, 0, out_width, out_height);
 SolidBrush.Free;

// тут рисуем из файла
//и сохраняем out_img



Модератор: Пользуйтесь тегом (кнопкой) SRC для оформления кода, пожалуйста.
...
Рейтинг: 0 / 0
31.01.2018, 21:05
    #39594413
Черный фон в прозрачных PNG при сохранении в JPG
Соколинский Борис,
ответ некорректен на уровне ответа. Естественно, в JPG нет прозрачности, и вопрос был в том, как черное замещение прозрачности изменить на белое.
...
Рейтинг: 0 / 0
31.01.2018, 21:06
    #39594415
white_nigger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Черный фон в прозрачных PNG при сохранении в JPG
DimonkaБоюсь, что у автора они уже сжаты в PNG. Так что надо решать поставленную задачу. :-)Понятно что они сжаты в PNG (насколько помню они сжимаются даже лучше, чем JPEG со 100% качеством). Я так понял что нужно что-то вроде превью для них сделать, хотя первый пост ТС-а можно по разному понять...
...
Рейтинг: 0 / 0
31.01.2018, 21:10
    #39594420
white_nigger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Черный фон в прозрачных PNG при сохранении в JPG
Александр ЧулДля потомков, - лечится такНадеюсь потомкам такое не понадобится. Я про задачу - обычно народ борется с обратным: сохранением альфа-канала, при различных манипуляциях, а не его уничтожением
...
Рейтинг: 0 / 0
31.01.2018, 21:21
    #39594426
Соколинский Борис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Черный фон в прозрачных PNG при сохранении в JPG
Александр ЧулСоколинский Борис,
ответ некорректен на уровне ответа. Естественно, в JPG нет прозрачности, и вопрос был в том, как черное замещение прозрачности изменить на белое.Ответ, как раз, корректный.
Содержимое прозрачного PNG может быть чем угодно кроме фотографии, следовательно JPEG для него не подходит.
Просто тебе пока повезло с белой подложкой.
Кстати, требуемый цвет в вопросе не задан.
...
Рейтинг: 0 / 0
31.01.2018, 21:56
    #39594456
Черный фон в прозрачных PNG при сохранении в JPG
white_nigger,
У меня софт работает с фотографиями, jpg, но иногда клиенты подсовывают png-шки прозрачные,
и надо все развернуть, поправить цветность, исключить переименованные в 'bmp' экселевские файлы (юзвери, они такие шутники иногда) убить громадные портянки по размеру и уравнять все в один формат )
...
Рейтинг: 0 / 0
31.01.2018, 22:06
    #39594464
defecator
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Черный фон в прозрачных PNG при сохранении в JPG
Александр Чулwhite_nigger,
У меня софт работает с фотографиями, jpg, но иногда клиенты подсовывают png-шки прозрачные,
и надо все развернуть, поправить цветность, исключить переименованные в 'bmp' экселевские файлы (юзвери, они такие шутники иногда) убить громадные портянки по размеру и уравнять все в один формат )
Так равняй в PNG, а не JPG
...
Рейтинг: 0 / 0
31.01.2018, 22:21
    #39594469
Черный фон в прозрачных PNG при сохранении в JPG
defecatorАлександр Чулwhite_nigger,
У меня софт работает с фотографиями, jpg, но иногда клиенты подсовывают png-шки прозрачные,
и надо все развернуть, поправить цветность, исключить переименованные в 'bmp' экселевские файлы (юзвери, они такие шутники иногда) убить громадные портянки по размеру и уравнять все в один формат )
Так равняй в PNG, а не JPG


Просто изначально так повелось, что основным был JPG.
Кратенько так - а в чем преимущество PNG чтобы вот так вот взять все поменять ) ?
Я допускаю, что я просто что-то недогоняю.
...
Рейтинг: 0 / 0
01.02.2018, 09:22
    #39594613
Соколинский Борис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Черный фон в прозрачных PNG при сохранении в JPG
Александр Чул,
PNG - более универсальный формат, в нем можно держать и растры с палитрой, и greyscale, и 16 бит, и альфаканал, причем в любых комбинациях.
...
Рейтинг: 0 / 0
01.02.2018, 10:39
    #39594706
Док
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Черный фон в прозрачных PNG при сохранении в JPG
Александр ЧулКратенько так - а в чем преимущество PNG чтобы вот так вот взять все поменять ) ?
статья на хабре
...
Рейтинг: 0 / 0
01.02.2018, 11:15
    #39594757
Соколинский Борис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Черный фон в прозрачных PNG при сохранении в JPG
Док статья на хабре Отстой.
...
Рейтинг: 0 / 0
01.02.2018, 12:00
    #39594803
Dimonka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Черный фон в прозрачных PNG при сохранении в JPG
Александр ЧулПросто изначально так повелось, что основным был JPG.
Кратенько так - а в чем преимущество PNG чтобы вот так вот взять все поменять ) ?
Я допускаю, что я просто что-то недогоняю. Кратко - 24-х битный PNG сжимает без потери качества, поэтому для иконок, растеризованной векторной графики, скриншотов он подходит лучше чем JPEG. JPEG "кипит" на контрастных границах.
...
Рейтинг: 0 / 0
01.02.2018, 12:20
    #39594820
AWSVladimir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Черный фон в прозрачных PNG при сохранении в JPG
Как вариант: PNG -> Bitmap24 ->Jpeg
В 24битмапе нет прозрачности, ну или предварительной заливкой прозрачности.

А вообще то правильно тебе все тут говорят.
Качественный Jpg = PNG по размеру, но даже в качественном Jpeg есть артифакты (по другому никак, тк с потерями сжатие)
А PNG это хранение в оригинале.
Если PNG, то и храни в PNG, нафиг этот Jpeg не здался.

Если лень в базе переделывать добавлять тип картинки, можно ручками по первым байтикам определить, что у тя за картинка, для показа юзеру. Хотя думаю, тут подскажут компонент автоматического показа png/jpeg/ico/etc..
...
Рейтинг: 0 / 0
01.02.2018, 12:52
    #39594841
Док
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Черный фон в прозрачных PNG при сохранении в JPG
Соколинский БорисДок статья на хабре Отстой.
Напиши свою :)
...
Рейтинг: 0 / 0
01.02.2018, 13:18
    #39594865
Соколинский Борис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Черный фон в прозрачных PNG при сохранении в JPG
ДокНапиши свою :) Я не писатель, я читатель и критик.
...
Рейтинг: 0 / 0
01.02.2018, 15:34
    #39595002
Arioch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Черный фон в прозрачных PNG при сохранении в JPG
Александр ЧулКратенько так - а в чем преимущество PNG чтобы вот так вот взять все поменять ) ?

вопрос не корректный. Меняешь как раз ты сейчас. с PNG на JPEG
поэтому вопрос должен быть "в чём преимущества JPEG, чтобы избавляться от PNG?"

DimonkaКратко - 24-х битный PNG сжимает без потери качества, поэтому для иконок, растеризованной векторной графики, скриншотов он подходит лучше чем JPEG. JPEG "кипит" на контрастных границах.

И кроме того, в PNG может быть прозрачность, полупрозрачность и анимация.
...
Рейтинг: 0 / 0
01.02.2018, 15:53
    #39595018
Соколинский Борис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Черный фон в прозрачных PNG при сохранении в JPG
AriochИ кроме того, в PNG может быть прозрачность, полупрозрачность и анимация. А стандарте PNG анимации нет, это рукодобавленная фича. Которую не обязан понимать софт, работающий с PNG.
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Черный фон в прозрачных PNG при сохранении в JPG / 24 сообщений из 24, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]