Как обрезать изображение снизу?

TotKto

Client
Регистрация
12.07.2013
Сообщения
123
Благодарностей
12
Баллы
18
если в обрезке можно задавать только от верха.
Пробовал писать через минус (-100), чтобы резало начиная снизу, но не помогает
 

TotKto

Client
Регистрация
12.07.2013
Сообщения
123
Благодарностей
12
Баллы
18
Если резать через минус, -10 режет уже практически всю страницу, хотя размер в пикселях
 

Igorst

Client
Регистрация
07.08.2011
Сообщения
189
Благодарностей
16
Баллы
18
Тоже возник вопрос как обрезать изображение снизу
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 375
Благодарностей
2 040
Баллы
113
Я так резал
Код:
var sss = project.Variables["directoriya_proecta"].Value+""+project.Variables["a"].Value+"";
int size = 30;
            Bitmap bmp = new Bitmap(""+project.Variables["fotopath"].Value+"");
            Bitmap bm = new Bitmap(bmp.Width, bmp.Height - size);
            for (int i = 0; i < bmp.Width; i++)
            {
                for (int j = 0; j < bmp.Height - size; j++)
                    bm.SetPixel(i, j, bmp.GetPixel(i, j));
            }
            bm.Save(sss+"\\"+project.Variables["random"].Value+".jpg");
            bmp.Dispose();
            bm.Dispose();
            System.IO.File.Delete(project.Variables["fotopath"].Value);
 
  • Спасибо
Реакции: Hannes

yarchino

Client
Регистрация
05.06.2016
Сообщения
170
Благодарностей
31
Баллы
28
Я так резал
Код:
var sss = project.Variables["directoriya_proecta"].Value+""+project.Variables["a"].Value+"";
int size = 30;
            Bitmap bmp = new Bitmap(""+project.Variables["fotopath"].Value+"");
            Bitmap bm = new Bitmap(bmp.Width, bmp.Height - size);
            for (int i = 0; i < bmp.Width; i++)
            {
                for (int j = 0; j < bmp.Height - size; j++)
                    bm.SetPixel(i, j, bmp.GetPixel(i, j));
            }
            bm.Save(sss+"\\"+project.Variables["random"].Value+".jpg");
            bmp.Dispose();
            bm.Dispose();
            System.IO.File.Delete(project.Variables["fotopath"].Value);
Что это за переменые 1)directoriya_proecta 2)a 3)fotopath 4)random. За что они отвечают?
 

Zzom

Client
Регистрация
23.05.2016
Сообщения
238
Благодарностей
66
Баллы
28
Можно обрезать изображение с 4х сторон этим кодом :
Код:
//берет путь к фото, обрезает со всех сторон по r_N пикселей,заменяя на первоначальный файл
string imagePath = project.Variables["path"].Value;
int left = Convert.ToInt32(project.Variables["r_1"].Value);
int top = Convert.ToInt32(project.Variables["r_2"].Value);
int right = Convert.ToInt32(project.Variables["r_3"].Value);
int bottom = Convert.ToInt32(project.Variables["r_4"].Value);
Image imgNew;

using(Image img = Image.FromFile(imagePath)){
    imgNew = ((Bitmap)img).Clone(new Rectangle(left, top, img.Width - right - left, img.Height - bottom - top),img.PixelFormat);
}
imgNew.Save(imagePath);
 
  • Спасибо
Реакции: Mike, juk88 и Karamzin

yarchino

Client
Регистрация
05.06.2016
Сообщения
170
Благодарностей
31
Баллы
28
Можно обрезать изображение с 4х сторон этим кодом :
Код:
//берет путь к фото, обрезает со всех сторон по r_N пикселей,заменяя на первоначальный файл
string imagePath = project.Variables["path"].Value;
int left = Convert.ToInt32(project.Variables["r_1"].Value);
int top = Convert.ToInt32(project.Variables["r_2"].Value);
int right = Convert.ToInt32(project.Variables["r_3"].Value);
int bottom = Convert.ToInt32(project.Variables["r_4"].Value);
Image imgNew;

using(Image img = Image.FromFile(imagePath)){
    imgNew = ((Bitmap)img).Clone(new Rectangle(left, top, img.Width - right - left, img.Height - bottom - top),img.PixelFormat);
}
imgNew.Save(imagePath);
Нужно обрезать с низу логотип сайта 15%-20%. Изображение разных размеров. Я нашёл выход через скрипты фотошопа, но хотелось всё-таки вариант в зенке на c#.
 

ecenin

Client
Регистрация
23.10.2012
Сообщения
25
Благодарностей
10
Баллы
3
Нужно обрезать с низу логотип сайта 15%-20%. Изображение разных размеров. Я нашёл выход через скрипты фотошопа, но хотелось всё-таки вариант в зенке на c#.
берите размер и умножайте его на 0.15-0.2 - будет кол-во пикселей, которое надо обрезать)
 

inilim

Client
Регистрация
16.09.2017
Сообщения
446
Благодарностей
170
Баллы
43
Нужно обрезать с низу логотип сайта 15%-20%. Изображение разных размеров. Я нашёл выход через скрипты фотошопа, но хотелось всё-таки вариант в зенке на c#.
будте добры скрин как вы это делаете, в фотошопе у меня не получается обрезать только с одной стороны. :(
 

dr1veq

Пользователь
Регистрация
09.02.2018
Сообщения
39
Благодарностей
44
Баллы
18
Нужно обрезать с низу логотип сайта 15%-20%. Изображение разных размеров. Я нашёл выход через скрипты фотошопа, но хотелось всё-таки вариант в зенке на c#.
Код:
double obr = 0.85;
            Bitmap image1 = new Bitmap(Image.FromFile(@"D:\22.jpg"));
            Image img = new Bitmap((image1.Width), Convert.ToInt32(image1.Height * obr));
            Graphics g = Graphics.FromImage(img);
            g.DrawImage(image1, new Point(0, 0));
            img.Save(@"D:\33.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
 
  • Спасибо
Реакции: Karamzin

yarchino

Client
Регистрация
05.06.2016
Сообщения
170
Благодарностей
31
Баллы
28
будте добры скрин как вы это делаете, в фотошопе у меня не получается обрезать только с одной стороны. :(
Давно было, уже ничего не сохранилось, нужно записать скрипт на одном фото, а после повторить на всех остальных. Это не очень сложно в ютубе полно видео как это сделать
 

inilim

Client
Регистрация
16.09.2017
Сообщения
446
Благодарностей
170
Баллы
43
Код:
double obr = 0.85;
            Bitmap image1 = new Bitmap(Image.FromFile(@"D:\22.jpg"));
            Image img = new Bitmap((image1.Width), Convert.ToInt32(image1.Height * obr));
            Graphics g = Graphics.FromImage(img);
            g.DrawImage(image1, new Point(0, 0));
            img.Save(@"D:\33.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
прокомментируйте код пожалуйста
 

dr1veq

Пользователь
Регистрация
09.02.2018
Сообщения
39
Благодарностей
44
Баллы
18
прокомментируйте код пожалуйста
Код:
double obr = 0.85;
            Bitmap image1 = new Bitmap(Image.FromFile(@"D:\22.jpg"));
            Image img = new Bitmap((image1.Width), Convert.ToInt32(image1.Height * obr));
            Graphics g = Graphics.FromImage(img);
            g.DrawImage(image1, new Point(0, 0));
            img.Save(@"D:\33.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
 

dr1veq

Пользователь
Регистрация
09.02.2018
Сообщения
39
Благодарностей
44
Баллы
18
прокомментируйте код пожалуйста
Код:
double obr = 0.85;  // 
            Bitmap image1 = new Bitmap(Image.FromFile(@"D:\22.jpg")); // Фото исходник
            Image img = new Bitmap((image1.Width), Convert.ToInt32(image1.Height * obr)); // Новое пустое изобр. с размерами ширины как у исходника и обрезанной высотой на 15%
            Graphics g = Graphics.FromImage(img); 
            g.DrawImage(image1, new Point(0, 0)); // Прорисовка исходника в пустое начиная с 0,0 координат (вставляет исходник и обрезает снизу на 15%, так как размеры img < image1)
            img.Save(@"D:\33.jpg", System.Drawing.Imaging.ImageFormat.Jpeg); // Сохранение изобр. 33.jpg на диск D:
Пред. сообщение случайно отправил, редактировать не могу!
 
  • Спасибо
Реакции: sidor800, bizzon и inilim

rosnordic

Client
Регистрация
18.08.2016
Сообщения
143
Благодарностей
28
Баллы
28
Xn Convert - бесплатный софт по пакетной обработке изображений. Если не нужно обязательно в шаблоне обрезку выполнять, то это решение будет значительно проще чем писать c# в зенно или скрипт в фш

 
  • Спасибо
Реакции: Чешир и inilim

zennoX

Client
Регистрация
05.04.2014
Сообщения
484
Благодарностей
134
Баллы
43
Код:
double obr = 0.85;  //
            Bitmap image1 = new Bitmap(Image.FromFile(@"D:\22.jpg")); // Фото исходник
            Image img = new Bitmap((image1.Width), Convert.ToInt32(image1.Height * obr)); // Новое пустое изобр. с размерами ширины как у исходника и обрезанной высотой на 15%
            Graphics g = Graphics.FromImage(img);
            g.DrawImage(image1, new Point(0, 0)); // Прорисовка исходника в пустое начиная с 0,0 координат (вставляет исходник и обрезает снизу на 15%, так как размеры img < image1)
            img.Save(@"D:\33.jpg", System.Drawing.Imaging.ImageFormat.Jpeg); // Сохранение изобр. 33.jpg на диск D:
Пред. сообщение случайно отправил, редактировать не могу!
как в этом сниппете обрезку сверху сделать?)
 

Jurtsche

Client
Регистрация
04.12.2015
Сообщения
30
Благодарностей
11
Баллы
8
хотелось всё-таки вариант в зенке на c#.
А просто через кубики теперь не кашерно? Поворот на 180->обрезать сверху->обратно на 180.
На практике реально Xn Convert удобнее и гибче
 

zennoX

Client
Регистрация
05.04.2014
Сообщения
484
Благодарностей
134
Баллы
43
А просто через кубики теперь не кашерно? Поворот на 180->обрезать сверху->обратно на 180.
На практике реально Xn Convert удобнее и гибче
Не кашерно убивать жесткий диск несколькими циклами перезаписи для одной картинки,
да и костыли опять же
 
Регистрация
11.11.2014
Сообщения
114
Благодарностей
5
Баллы
18
Можно обрезать изображение с 4х сторон этим кодом :
Код:
//берет путь к фото, обрезает со всех сторон по r_N пикселей,заменяя на первоначальный файл
string imagePath = project.Variables["path"].Value;
int left = Convert.ToInt32(project.Variables["r_1"].Value);
int top = Convert.ToInt32(project.Variables["r_2"].Value);
int right = Convert.ToInt32(project.Variables["r_3"].Value);
int bottom = Convert.ToInt32(project.Variables["r_4"].Value);
Image imgNew;

using(Image img = Image.FromFile(imagePath)){
    imgNew = ((Bitmap)img).Clone(new Rectangle(left, top, img.Width - right - left, img.Height - bottom - top),img.PixelFormat);
}
imgNew.Save(imagePath);

Спасибо большое!
Помогло
 

Dresskod

Client
Регистрация
08.09.2016
Сообщения
390
Благодарностей
139
Баллы
43
Внесу свою лепту.
Исходная картинка имеет размер 95 кб и размеры сторон 500 * 1800 px. После обрезки изображения кодом выше получилось размер 500 * 900 но размер картинки вырос до 500 кб. Как так? Никто не замечал?

Чтобы этого не случилось делаем замену в последней строчке
C#:
imgNew.Save(imagePath);
//Заменяем на

imgNew.Save(imagePath, System.Drawing.Imaging.ImageFormat.Jpeg);
После этого размер будет в два раза меньше как и положено
 
  • Спасибо
Реакции: proektion

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