Как наложить одну картинку на другую?

timoxa949

Client
Регистрация
16.11.2018
Сообщения
158
Благодарностей
27
Баллы
28
Всем доброго, как сделать наложение одной картинки на другую?
Допустим имеется Картинка 1 с размером 400x100px
Имеется Картинка 2 (бэкграунд) с просто белым фоном размером 500x500px

Как сделать так чтобы Картинка 1 наложилась на Картинку 2 строго по центру и сохранилась по указанному пути?

Спасибо.
 

Astraport

Client
Регистрация
01.05.2015
Сообщения
4 983
Благодарностей
4 434
Баллы
113
Стандартный кубик "Обработка изображений", режим вотермарка.
 

Gunjubasik

Client
Регистрация
30.05.2019
Сообщения
3 526
Благодарностей
1 323
Баллы
113
Всем доброго, как сделать наложение одной картинки на другую?
Допустим имеется Картинка 1 с размером 400x100px
Имеется Картинка 2 (бэкграунд) с просто белым фоном размером 500x500px

Как сделать так чтобы Картинка 1 наложилась на Картинку 2 строго по центру и сохранилась по указанному пути?

Спасибо.
Вот хорошая статья на все случаи жизни с изображением.
 

nikolius

Новичок
Регистрация
02.06.2016
Сообщения
14
Благодарностей
6
Баллы
3
Друзья! У меня такой же вопрос — Как наложить одну картинку на другую?
Поискав на форме нашел только как обработать картинку, или наложить текст на картинку, или склеять две картинки в одну (где онда картинка сверху другая снизу).
Подскажите добрый люди готовый C# для наложение одной картинки на другую, с указанием координат наложения картинки ;-)
Спасибо всем кто откликнется !
 

Astraport

Client
Регистрация
01.05.2015
Сообщения
4 983
Благодарностей
4 434
Баллы
113
Друзья! У меня такой же вопрос — Как наложить одну картинку на другую?
Поискав на форме нашел только как обработать картинку, или наложить текст на картинку, или склеять две картинки в одну (где онда картинка сверху другая снизу).
Подскажите добрый люди готовый C# для наложение одной картинки на другую, с указанием координат наложения картинки ;-)
Спасибо всем кто откликнется !
Читай статью в подписи, качай примеры, делай по аналогии.
 

nikolius

Новичок
Регистрация
02.06.2016
Сообщения
14
Благодарностей
6
Баллы
3
Читай статью в подписи, качай примеры, делай по аналогии.
Отличная помощь в рамках "гугли"... вот вам не лень писать не по делу? тратить время на это, по мне так лучше промолчать а не показывать свое высокомерие ... в моем понимание форум создан что бы помогать а не в гугл(и тому подобное) всех отправлять, хотя по частым и тупым вопросам можно и туда)))

Ну да ладно о грустном, вот как я решил эту задачу:

string img1 = project.Directory + @"\Image1.jpg";
string img2 = project.Directory + @"\Image2.jpg";
Bitmap bm1 = new Bitmap(img1, true);
Bitmap bm2 = new Bitmap(img2, true);
int width = bm1.Width;
int height = bm1.Height;

Bitmap result = new Bitmap(width, height);
Graphics graphics = Graphics.FromImage(result);
graphics.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;

graphics.DrawImage(bm1, 0, 0, result.Width, result.Height);
graphics.DrawImage(bm2, 482, 16, bm2.Width, bm2.Height);

result.Save(project.Directory + @"\newImage.jpg");

result.Dispose();
bm1.Dispose();
bm2.Dispose();
 
  • Спасибо
Реакции: qweeeraz

Astraport

Client
Регистрация
01.05.2015
Сообщения
4 983
Благодарностей
4 434
Баллы
113
Отличная помощь в рамках "гугли"... вот вам не лень писать не по делу?
С какого перепугу я "писал не по делу" и "отправлял гуглить"?
90% того кода, что вы привели, имеются в моих примерах, которые нужно тупо адаптировать под себя.
Или вы предлагаете мне полностью писать код за вас???
Ваш пример, кстати, не универсальный и захардкорден константами и завтра новый "обиженный высокомерием" начнёт плакать, что у него строка graphics.DrawImage(bm2, 482, 16, bm2.Width, bm2.Height); размещает картинку не по центру.
 
  • Спасибо
Реакции: doc

timoxa949

Client
Регистрация
16.11.2018
Сообщения
158
Благодарностей
27
Баллы
28
Стандартный кубик "Обработка изображений", режим вотермарка.
Данный способ работает не так как нужно. Если картинка-ватермарк больше чем картинка-бекграунд, то она обрезается. Нужно даже если картинки-ватермарк больше размером чем бекграунд, надо чтобы она ресайзилась под размер бекграунд-картинки и ставилась по центру. Реально такое вообще сделать?
 
Последнее редактирование:

timoxa949

Client
Регистрация
16.11.2018
Сообщения
158
Благодарностей
27
Баллы
28
Отличная помощь в рамках "гугли"... вот вам не лень писать не по делу? тратить время на это, по мне так лучше промолчать а не показывать свое высокомерие ... в моем понимание форум создан что бы помогать а не в гугл(и тому подобное) всех отправлять, хотя по частым и тупым вопросам можно и туда)))

Ну да ладно о грустном, вот как я решил эту задачу:

string img1 = project.Directory + @"\Image1.jpg";
string img2 = project.Directory + @"\Image2.jpg";
Bitmap bm1 = new Bitmap(img1, true);
Bitmap bm2 = new Bitmap(img2, true);
int width = bm1.Width;
int height = bm1.Height;

Bitmap result = new Bitmap(width, height);
Graphics graphics = Graphics.FromImage(result);
graphics.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;

graphics.DrawImage(bm1, 0, 0, result.Width, result.Height);
graphics.DrawImage(bm2, 482, 16, bm2.Width, bm2.Height);

result.Save(project.Directory + @"\newImage.jpg");

result.Dispose();
bm1.Dispose();
bm2.Dispose();
Почему-то вообще не накладывает у меня, почему то.
Параметры картинок:
Image1.jpg 75x694px;
Image2.jpg 500x500px

На выходе получается таже image1.jpg c разрешением 75x694px и с размером файла в 4 раза больше :(
 

Astraport

Client
Регистрация
01.05.2015
Сообщения
4 983
Благодарностей
4 434
Баллы
113
Почему-то вообще не накладывает у меня, почему то.
Параметры картинок:
Image1.jpg 75x694px;
Image2.jpg 500x500px

На выходе получается таже image1.jpg c разрешением 75x694px и с размером файла в 4 раза больше :(
ЧТД.
Сейчас nikolius напишет полный код с комментариями как нужно делать.
 

Astraport

Client
Регистрация
01.05.2015
Сообщения
4 983
Благодарностей
4 434
Баллы
113
Данный способ работает не так как нужно. Если картинка-ватермарк больше чем картинка-бекграунд, то она обрезается. Нужно даже если картинки-ватермарк больше размером чем бекграунд, надо чтобы она ресайзилась под размер бекграунд-картинки и ставилась по центру. Реально такое вообще сделать?
Кубиками? Теоретически можно. Брать размеры основной картинки, скейлить кубиками обе картинки до нужных размеров, склеивать.
С помощью c# в разы проще.
 

nikolius

Новичок
Регистрация
02.06.2016
Сообщения
14
Благодарностей
6
Баллы
3
С какого перепугу я "писал не по делу" и "отправлял гуглить"?
....
Или вы предлагаете мне полностью писать код за вас???
Да согласен немного эмоционально....
С картинками не работал и потратил несколько дней на поиск решения, а просил я "Подскажите добрый люди готовый C# для наложение одной картинки на другую, с указанием координат наложения картинки " т.ч. graphics.DrawImage(bm2, 482, 16, bm2.Width, bm2.Height); по центру она и не должна быть ;-). Да задачу я описал коротко и в ней подразумевалось что картинка1 будет больше картинки2 (всегда по алгоритму действия) но это уже другая история...
 

Astraport

Client
Регистрация
01.05.2015
Сообщения
4 983
Благодарностей
4 434
Баллы
113
Да согласен немного эмоционально....
С картинками не работал и потратил несколько дней на поиск решения, а просил я "Подскажите добрый люди готовый C# для наложение одной картинки на другую, с указанием координат наложения картинки " т.ч. graphics.DrawImage(bm2, 482, 16, bm2.Width, bm2.Height); по центру она и не должна быть ;-). Да задачу я описал коротко и в ней подразумевалось что картинка1 будет больше картинки2 (всегда по алгоритму действия) но это уже другая история...
Ну теперь вы точно можете написать человеку выше решение.
Сделайте то, что я не сделал вам и за что вы меня резко отчитали.
 

timoxa949

Client
Регистрация
16.11.2018
Сообщения
158
Благодарностей
27
Баллы
28
Кубиками? Теоретически можно. Брать размеры основной картинки, скейлить кубиками обе картинки до нужных размеров, склеивать.
С помощью c# в разы проще.
Лучше С#, если у вас имеется решение, буду очень благодарен. Сам в C# не силен, только начинаю изучать.
 

Astraport

Client
Регистрация
01.05.2015
Сообщения
4 983
Благодарностей
4 434
Баллы
113
Лучше С#, если у вас имеется решение, буду очень благодарен. Сам в C# не силен, только начинаю изучать.
Я же писал выше. Потратьте полчаса, изучите мой код и будет у вас своё решение.
Дело не в том, что я не хочу. Картинки у всех разные, пропорции тоже.
Там нужно скейлить WM по вашим пропорциям.
Завтра у вас сменится задача и будете просить опять исправить?
PS. Если не получится, завтра напишу код.
 
Последнее редактирование:

timoxa949

Client
Регистрация
16.11.2018
Сообщения
158
Благодарностей
27
Баллы
28
Я же писал выше. Потратьте полчаса, изучите мой код и будет у вас своё решение.
Дело не в том, что я не хочу. Картинки у всех разные, пропорции тоже.
Там нужно скейлить WM по вашим пропорциям.
Завтра у вас сменится задача и будете просить опять исправить?
PS. Если не получится, завтра напишу код.
не получается
 

Astraport

Client
Регистрация
01.05.2015
Сообщения
4 983
Благодарностей
4 434
Баллы
113
C#:
Image original = Image.FromFile(project.Directory + @"/image.jpg");

int w = original.Width;
int h = original.Height;

int w_wm = (int) w/10;

Image wm = Image.FromFile(project.Directory + @"/wm.png");
float scale = (float)wm.Height / wm.Width;
int h_wm = (int) (w_wm * scale);
int x = (int) (w/2 - w_wm/2);
int y = (int) (h/2 - h_wm/2);

Graphics gr = Graphics.FromImage(original);
gr.DrawImage(wm, x, y, w_wm, h_wm);

original.Save(project.Directory + "/image_result.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
original.Dispose();
wm.Dispose();
gr.Dispose();
 
  • Спасибо
Реакции: timoxa949 и doc

timoxa949

Client
Регистрация
16.11.2018
Сообщения
158
Благодарностей
27
Баллы
28
C#:
Image original = Image.FromFile(project.Directory + @"/image.jpg");

int w = original.Width;
int h = original.Height;

int w_wm = (int) w/10;

Image wm = Image.FromFile(project.Directory + @"/wm.png");
float scale = (float)wm.Height / wm.Width;
int h_wm = (int) (w_wm * scale);
int x = (int) (w/2 - w_wm/2);
int y = (int) (h/2 - h_wm/2);

Graphics gr = Graphics.FromImage(original);
gr.DrawImage(wm, x, y, w_wm, h_wm);

original.Save(project.Directory + "/image_result.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
original.Dispose();
wm.Dispose();
gr.Dispose();
Спасибо большое, работает как надо!!!
 

Gooldbee

Client
Регистрация
16.05.2019
Сообщения
224
Благодарностей
25
Баллы
28
Как получить информацию из картинки?

61796

К примеру фамилию человека П1
 

Astraport

Client
Регистрация
01.05.2015
Сообщения
4 983
Благодарностей
4 434
Баллы
113

Кто просматривает тему: (Всего: 3, Пользователи: 0, Гости: 3)