Водяной знак

ITC

Client
Регистрация
16.04.2010
Сообщения
271
Благодарностей
7
Баллы
18
Всем привет.
Как в экшене Обработка изображений, наложить водяной знак стандартного размера, а не относительно размера картинки? Бывает, если изображение маленьких размеров, то водяной знак на неё даже не помещается, перекрывает всё.
 

Mikhail B.

Moderator
Регистрация
23.12.2014
Сообщения
14 328
Благодарностей
5 430
Баллы
113
Не знаю, у меня если водяной знак за пределы выходит, то картинка становиться больше по размеру, попробуйте положение поменять, я использую справа сверху.
 

ITC

Client
Регистрация
16.04.2010
Сообщения
271
Благодарностей
7
Баллы
18
Не знаю, у меня если водяной знак за пределы выходит, то картинка становиться больше по размеру, попробуйте положение поменять, я использую справа сверху.
Во всех положениях перепробовал )
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 707
Баллы
113
Скрины бы приложили
 

ITC

Client
Регистрация
16.04.2010
Сообщения
271
Благодарностей
7
Баллы
18
Скрины бы приложили
Размер вотермарка меняется в зависимости от размера картинки. Как сделать, чтобы вотермарк был относителен к размерам изображения, т.о. визуально одинаковым, при изображении 800*600 px и при 200 * 100 px ?
psc.png zpc.png
 

ITC

Client
Регистрация
16.04.2010
Сообщения
271
Благодарностей
7
Баллы
18
актуально
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 707
Баллы
113
Не понятно как вычислить размеры водяного знака относительно изображения. Уточните что именно нужно подробнее) Может сделают. Но пока просто не поняли что вы хотите (
 

Kirillzenp

Client
Регистрация
27.02.2018
Сообщения
100
Благодарностей
1
Баллы
18
Таже беда. При меленьком размере знак становится на пол картинки
 

Astraport

Client
Регистрация
01.05.2015
Сообщения
4 942
Благодарностей
4 334
Баллы
113
Таже беда. При меленьком размере знак становится на пол картинки
1. Вычисляете нужный размер картинки.
2. С помощью graphics transformation matrix меняете размер текстового блока до нужного % от п. 1
 

Kirillzenp

Client
Регистрация
27.02.2018
Сообщения
100
Благодарностей
1
Баллы
18

Astraport

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

Kirillzenp

Client
Регистрация
27.02.2018
Сообщения
100
Благодарностей
1
Баллы
18
Что-то пошло не так..
upload_2018-3-24_17-7-29.png

Bitmap yourImage = project.Variables["Urlimg"].Value;
Bitmap yourWatermark = project.Variables["Watermark"].Value;
int newWaterWidth = (int)((float)yourImage.Width * .3);
int newWaterHeight = (int)((float)yourImage.Height* .3);
using(Bitmap resizedWaterm = new Bitmap(newWaterWidth, newWaterHeight))
using(Graphics g = Graphics.FromImage((Image)resizedWaterm))
{
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
g.DrawImage(yourWatermark, 0, 0, newWaterWidth , newWaterHeight );
}
int x = project.Variables["Type"].Value, y = project.Variables["Type2"].Value;
using(Graphics g2 = Graphics.FromImage((Image)resizedWaterm))
{
g2.FillRectangle(watermarkBrush, new Rectangle(new Point(x, y), new Size(watermarkImage.Width + 1, watermarkImage.Height)));
}
 

Astraport

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

Kirillzenp

Client
Регистрация
27.02.2018
Сообщения
100
Благодарностей
1
Баллы
18

Astraport

Client
Регистрация
01.05.2015
Сообщения
4 942
Благодарностей
4 334
Баллы
113
  • Спасибо
Реакции: Kirillzenp

Kirillzenp

Client
Регистрация
27.02.2018
Сообщения
100
Благодарностей
1
Баллы
18

Astraport

Client
Регистрация
01.05.2015
Сообщения
4 942
Благодарностей
4 334
Баллы
113
PHP:
Bitmap yourImage = (Bitmap) Image.FromFile(project.Variables["Urlimg"].Value, true);
Bitmap yourWatermark = (Bitmap) Image.FromFile(project.Variables["Watermark"].Value, true);
Graphics g = Graphics.FromImage(yourImage);
float k = (float) yourWatermark.Width/yourWatermark.Height;
int m = (int)(yourImage.Width * 0.1 * k);// итоговая ширина знака
int s = 10;// отступы снизу и справа
g.DrawImage(yourWatermark, yourImage.Width - m * k - s, yourImage.Height - m - s, m * k, m);
var encoders = System.Drawing.Imaging.ImageCodecInfo.GetImageEncoders();
var eps = new System.Drawing.Imaging.EncoderParameters(1);
eps.Param[0] = new System.Drawing.Imaging.EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 95L);
yourImage.Save(project.Directory + "/temp.jpg", encoders.FirstOrDefault( t => t.MimeType == "image/jpeg"), eps);
Привязываемся к ширине картинки, можно к высоте. Водяной знак по ширине 10% от ширины картинки.
10 пикселей отступы снизу и справа.
 

Kirillzenp

Client
Регистрация
27.02.2018
Сообщения
100
Благодарностей
1
Баллы
18
PHP:
Bitmap yourImage = (Bitmap) Image.FromFile(project.Variables["Urlimg"].Value, true);
Bitmap yourWatermark = (Bitmap) Image.FromFile(project.Variables["Watermark"].Value, true);
Graphics g = Graphics.FromImage(yourImage);
float k = (float) yourWatermark.Width/yourWatermark.Height;
int m = (int)(yourImage.Width * 0.1 * k);// итоговая ширина знака
int s = 10;// отступы снизу и справа
g.DrawImage(yourWatermark, yourImage.Width - m * k - s, yourImage.Height - m - s, m * k, m);
var encoders = System.Drawing.Imaging.ImageCodecInfo.GetImageEncoders();
var eps = new System.Drawing.Imaging.EncoderParameters(1);
eps.Param[0] = new System.Drawing.Imaging.EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 95L);
yourImage.Save(project.Directory + "/temp.jpg", encoders.FirstOrDefault( t => t.MimeType == "image/jpeg"), eps);
Привязываемся к ширине картинки, можно к высоте. Водяной знак по ширине 10% от ширины картинки.
10 пикселей отступы снизу и справа.
Спасибо, работает. Как прозрачность знаку добавить?
 

Astraport

Client
Регистрация
01.05.2015
Сообщения
4 942
Благодарностей
4 334
Баллы
113
Спасибо, работает. Как прозрачность знаку добавить?
PHP:
System.Drawing.Imaging.ColorMatrix colormatrix = new System.Drawing.Imaging.ColorMatrix();
colormatrix.Matrix33 = 0.5F;
System.Drawing.Imaging.ImageAttributes imgAttribute = new System.Drawing.Imaging.ImageAttributes(
 

Kirillzenp

Client
Регистрация
27.02.2018
Сообщения
100
Благодарностей
1
Баллы
18
PHP:
System.Drawing.Imaging.ColorMatrix colormatrix = new System.Drawing.Imaging.ColorMatrix();
colormatrix.Matrix33 = 0.5F;
System.Drawing.Imaging.ImageAttributes imgAttribute = new System.Drawing.Imaging.ImageAttributes(
Если вы надеялись, что я сам догадаюсь что тут нужно изменить, то вы не правы. Воткнув этот код прозрачность не появилась:(
 

yriy158

Client
Регистрация
10.08.2013
Сообщения
491
Благодарностей
301
Баллы
63
Если вы надеялись, что я сам догадаюсь что тут нужно изменить, то вы не правы. Воткнув этот код прозрачность не появилась:(
Я тоже в шарпе ноль, но судя по коду там только есть одно цифровое значение, котрое логично было-бы попробовать менять "colormatrix.Matrix33 = 0.5F;" Сори, если ошибся.
 

Kirillzenp

Client
Регистрация
27.02.2018
Сообщения
100
Благодарностей
1
Баллы
18
Я тоже в шарпе ноль, но судя по коду там только есть одно цифровое значение, котрое логично было-бы попробовать менять "colormatrix.Matrix33 = 0.5F;" Сори, если ошибся.
Это первое что я попытался сделать:-)
 

vasyaya

Client
Регистрация
09.02.2015
Сообщения
555
Благодарностей
35
Баллы
28
PHP:
Bitmap yourImage = (Bitmap) Image.FromFile(project.Variables["Urlimg"].Value, true);
Bitmap yourWatermark = (Bitmap) Image.FromFile(project.Variables["Watermark"].Value, true);
Graphics g = Graphics.FromImage(yourImage);
float k = (float) yourWatermark.Width/yourWatermark.Height;
int m = (int)(yourImage.Width * 0.1 * k);// итоговая ширина знака
int s = 10;// отступы снизу и справа
g.DrawImage(yourWatermark, yourImage.Width - m * k - s, yourImage.Height - m - s, m * k, m);
var encoders = System.Drawing.Imaging.ImageCodecInfo.GetImageEncoders();
var eps = new System.Drawing.Imaging.EncoderParameters(1);
eps.Param[0] = new System.Drawing.Imaging.EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 95L);
yourImage.Save(project.Directory + "/temp.jpg", encoders.FirstOrDefault( t => t.MimeType == "image/jpeg"), eps);
Привязываемся к ширине картинки, можно к высоте. Водяной знак по ширине 10% от ширины картинки.
10 пикселей отступы снизу и справа.
Подскажи пожалуйста как сохранить изображение после нанесения вод.знака, вместо оригинала?
 

Astraport

Client
Регистрация
01.05.2015
Сообщения
4 942
Благодарностей
4 334
Баллы
113
  • Спасибо
Реакции: eee и vasyaya

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