Водяной знак

  • Автор темы Автор темы ITC
  • Дата начала Дата начала

ITC

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

Размер вотермарка меняется в зависимости от размера картинки. Как сделать, чтобы вотермарк был относителен к размерам изображения, т.о. визуально одинаковым, при изображении 800*600 px и при 200 * 100 px ?
psc.png zpc.png
 
актуально
 
Не понятно как вычислить размеры водяного знака относительно изображения. Уточните что именно нужно подробнее) Может сделают. Но пока просто не поняли что вы хотите (
 
Таже беда. При меленьком размере знак становится на пол картинки
 
Таже беда. При меленьком размере знак становится на пол картинки
1. Вычисляете нужный размер картинки.
2. С помощью graphics transformation matrix меняете размер текстового блока до нужного % от п. 1
 
Что-то пошло не так..
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)));
}
 
  • Оценить
Реакции: Kirillzenp
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 пикселей отступы снизу и справа.
 
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 пикселей отступы снизу и справа.
Спасибо, работает. Как прозрачность знаку добавить?
 
Спасибо, работает. Как прозрачность знаку добавить?
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(
 
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(
Если вы надеялись, что я сам догадаюсь что тут нужно изменить, то вы не правы. Воткнув этот код прозрачность не появилась:(
 
Если вы надеялись, что я сам догадаюсь что тут нужно изменить, то вы не правы. Воткнув этот код прозрачность не появилась:(
Я тоже в шарпе ноль, но судя по коду там только есть одно цифровое значение, котрое логично было-бы попробовать менять "colormatrix.Matrix33 = 0.5F;" Сори, если ошибся.
 
Я тоже в шарпе ноль, но судя по коду там только есть одно цифровое значение, котрое логично было-бы попробовать менять "colormatrix.Matrix33 = 0.5F;" Сори, если ошибся.
Это первое что я попытался сделать:)
 
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 пикселей отступы снизу и справа.
Подскажи пожалуйста как сохранить изображение после нанесения вод.знака, вместо оригинала?
 
  • Оценить
Реакции: eee и vasyaya

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