Как с помощью C# обрезать картинку?

shifu

Client
Регистрация
04.04.2011
Сообщения
168
Благодарностей
23
Баллы
18
Собственно вопрос в названии топа. Спасибо.
 

shade

Client
Регистрация
19.11.2010
Сообщения
580
Благодарностей
346
Баллы
63
Собственно вопрос в названии топа. Спасибо.
Как тебе её обрезать надо?
Вот очень простой пример кода:
JavaScript:
var img = new Bitmap(20, 10);

var result = new Bitmap(10, 10);

for (int i = 0; i < img.Width; i++)
     for (int j = 0; j < img.Height; j++)
          result.SetPixel(i, j, img.GetPixel(i + 10, j));
из изображения 20x10 получает 10x10 причем новое изображение это правая часть (10x10) от изображения 20x10
 

shifu

Client
Регистрация
04.04.2011
Сообщения
168
Благодарностей
23
Баллы
18
Я не прогер, пожалуйста покажи куда ставить адрес и имя файла?
 

shade

Client
Регистрация
19.11.2010
Сообщения
580
Благодарностей
346
Баллы
63

shifu

Client
Регистрация
04.04.2011
Сообщения
168
Благодарностей
23
Баллы
18
Скрипт должен брать файл C:\1.jpg. Вырезать кусок картинки по заданным координатам. Сохранить в файл С:\2.jpg.
Примерно такой результат хочу. :rolleyes:
rose.gif crop.gif
 
  • Спасибо
Реакции: LightWood

shade

Client
Регистрация
19.11.2010
Сообщения
580
Благодарностей
346
Баллы
63
Скрипт должен брать файл C:\1.jpg. Вырезать кусок картинки по заданным координатам. Сохранить в файл С:\2.jpg.
Примерно такой результат хочу. :rolleyes:
Посмотреть вложение 5034 Посмотреть вложение 5035
Вообще просто:
JavaScript:
var img = new Bitmap(Image.FromFile(@"C:\1.jpg"));

int x1 = 10;
int x2 = 50;
int y1 = 10;
int y2 = 50;

int width = x2 - x1 + 1;
int height = y2 - y1 + 1;

var result = new Bitmap(width, height);

for (int i = x1; i <= x2; i++)
     for (int j = y1; j <= y2; j++)
          result.SetPixel(i - x1, j - y1, img.GetPixel(i, j));

 result.Save(@"C:\2.jpg")
где (x1, y1) - координаты левой верхней точки, а (x2, y2) - координаты нижней правой точки прямоугольника старого изображения который должен стать новой картинкой.
В коде заданы вот так:
JavaScript:
int x1 = 10;
int x2 = 50;
int y1 = 10;
int y2 = 50;
 

tonic

Client
Регистрация
07.08.2011
Сообщения
103
Благодарностей
50
Баллы
28
Для пакетной обработки картинок есть бесплатная программа "FastStone Image Viewer". Можно сразу и обрезать и добавлять рамки и еще много чего. В общем может будет полезной.
 

surrealmix

Client
Регистрация
07.03.2013
Сообщения
715
Благодарностей
409
Баллы
63
Есть консольное приложение для работы с изображениями, может кому пригодится.
http://www.xnview.com/en/nconvert/
 
  • Спасибо
Реакции: sw_sw

shifu

Client
Регистрация
04.04.2011
Сообщения
168
Благодарностей
23
Баллы
18
Большое спасибо всем ответившим! shade - тебе отдельное спасибо, скрипт работает. :cool:
 

frion-seo

Client
Регистрация
27.02.2011
Сообщения
538
Благодарностей
471
Баллы
63
Снова хочу поднять данный вопрос c нарезкой.
есть картинка
телефон 3.png
ее нужно порезать на 3 части, т.е. каждый номер отдельно чтоб был. Но бывает номера 2 или вобще 1 и соответственно высота картинки меняется.
Как на C# замутить чтобы он автоматически исходя из высоты картинки понимал на сколько частей ее порезать ?
 

frion-seo

Client
Регистрация
27.02.2011
Сообщения
538
Благодарностей
471
Баллы
63
актуально прошу помощи
 

Lexicon

Client
Регистрация
27.12.2012
Сообщения
1 775
Благодарностей
901
Баллы
113
  • Спасибо
Реакции: vitorrio и frion-seo

Radzhab

Client
Регистрация
23.05.2014
Сообщения
1 500
Благодарностей
1 268
Баллы
113
Снова хочу поднять данный вопрос c нарезкой.
есть картинка
Посмотреть вложение 5634
ее нужно порезать на 3 части, т.е. каждый номер отдельно чтоб был. Но бывает номера 2 или вобще 1 и соответственно высота картинки меняется.
Как на C# замутить чтобы он автоматически исходя из высоты картинки понимал на сколько частей ее порезать ?
ПРосто порезать каждый символ устроит?
 
  • Спасибо
Реакции: frion-seo

frion-seo

Client
Регистрация
27.02.2011
Сообщения
538
Благодарностей
471
Баллы
63
просто по символам не нужно, нужно тупо на 3 части чтоб каждый нормер был отдельно ....
 

frion-seo

Client
Регистрация
27.02.2011
Сообщения
538
Благодарностей
471
Баллы
63
заплачу, ребята тока помогите
 

Lexicon

Client
Регистрация
27.12.2012
Сообщения
1 775
Благодарностей
901
Баллы
113
Нуууу тут в воздухе запахло котоаватарками))))))))
 
  • Спасибо
Реакции: Ribas и frion-seo

shade

Client
Регистрация
19.11.2010
Сообщения
580
Благодарностей
346
Баллы
63
просто по символам не нужно, нужно тупо на 3 части чтоб каждый нормер был отдельно ....
Код:
int h = Convert.ToInt32(project.Variables["height"].Value);

var img = new Bitmap(Image.FromFile(@"C:\телефон 3.png"));

int count = img.Height / h;

for (int k = 0; k < count; k++)
{
    Bitmap result = new Bitmap(img.Width, h);
    for (int i = 0; i < img.Width; i++)
        for (int j = 0; j < h; j++) result.SetPixel(i, j, img.GetPixel(i, (h * k) + j));
    result.Save(String.Format(@"C:\{0}.png", k + 1));
}
где {-Variable.height-} это ширина новых картинок
 
  • Спасибо
Реакции: frion-seo

Lexicon

Client
Регистрация
27.12.2012
Сообщения
1 775
Благодарностей
901
Баллы
113
ну вот((((( тогда уж и добью что высота 20 пикселей(((
 
  • Спасибо
Реакции: frion-seo

kyvour

Активный пользователь
Регистрация
17.05.2014
Сообщения
186
Благодарностей
36
Баллы
28
если картинки черно-белые - я бы шел в цикле while и проверял наличие черных пикселей в строке. Если есть черный пиксель - копируем всю строку в новую картинку. Если нет - сохраняем старую, чистим переменную новой картинки и продолжаем заново искать черные пиксели. Так хоть 1000 номеров 1-й картинкой закинь - все должно поделить
 
  • Спасибо
Реакции: frion-seo

kyvour

Активный пользователь
Регистрация
17.05.2014
Сообщения
186
Благодарностей
36
Баллы
28
  • Спасибо
Реакции: frion-seo

Roman*

Client
Регистрация
25.09.2013
Сообщения
1 657
Благодарностей
656
Баллы
113
А подскажите, есть возможность на C# на фото, кидать ватемарку или просто текст? в рандомном положении снизу от лева до права+ рандомный наклон небольшой+ чтобы фотка всегда бралась и рандомно меняла размерчик?
 

Radzhab

Client
Регистрация
23.05.2014
Сообщения
1 500
Благодарностей
1 268
Баллы
113
А подскажите, есть возможность на C# на фото, кидать ватемарку или просто текст? в рандомном положении снизу от лева до права+ рандомный наклон небольшой+ чтобы фотка всегда бралась и рандомно меняла размерчик?
http://stackoverflow.com/questions/1949526/adding-a-watermark-image-to-an-image
 

Roman*

Client
Регистрация
25.09.2013
Сообщения
1 657
Благодарностей
656
Баллы
113

frion-seo

Client
Регистрация
27.02.2011
Сообщения
538
Благодарностей
471
Баллы
63
И так проблема следующая - резать картинки вроде научился нормально) Вот только проблема еще одна.
Как на C# перед тем как резать картинку, получить ее размеры ?
Для примера в прикрепленной картинке снизу мне нужно отрезать последний абзац.

накопал вот такой код, но применить его хз как.. не выходит... что вставлять вместо Filename не пойму
Код:
 FileInfo file = new FileInfo(Filename);
lbl_FileSize.Text = file.Length.ToString(Filename);
using (System.Drawing.Image objImage = System.Drawing.Image.FromFile(Filename))
{
           lbl_ImageWidth.Text = objImage.Width.ToString();
           lbl_ImageHeight.Text = objImage.Height.ToString();
}
 

Вложения

  • 101,6 КБ Просмотры: 39
Последнее редактирование:

frion-seo

Client
Регистрация
27.02.2011
Сообщения
538
Благодарностей
471
Баллы
63
Мужики помогите плиз.. вся работа встала..
 

Radzhab

Client
Регистрация
23.05.2014
Сообщения
1 500
Благодарностей
1 268
Баллы
113
могу помочь
 

myweb101

Client
Регистрация
29.04.2013
Сообщения
175
Благодарностей
30
Баллы
28
Как получить размеры картинки в С. Может кому пригодится. Если нет изображения или оно пустое возвращает fail.
Код:
//string FileName = @"C:\1.jpg";
string FileName = project.Variables["path_to_img"].Value;
System.Drawing.Image objImage = System.Drawing.Image.FromFile(FileName);
var ImageWidth = objImage.Width.ToString();
var ImageHeight = objImage.Height.ToString();
return ImageWidth;
//return ImageHeight;
 
Последнее редактирование:
  • Спасибо
Реакции: nomarketing

sekoan

Client
Регистрация
04.01.2015
Сообщения
219
Благодарностей
92
Баллы
28
var img = new Bitmap(Image.FromFile(@"C:\1.jpg"));

int x1 = 10;
int x2 = 50;
int y1 = 10;
int y2 = 50;

int width = x2 - x1 + 1;
int height = y2 - y1 + 1;

var result = new Bitmap(width, height);

for (int i = x1; i <= x2; i++)
for (int j = y1; j <= y2; j++)
result.SetPixel(i - x1, j - y1, img.GetPixel(i, j));

result.Save(@"C:\2.jpg")
Здравстуйте. Хотел обрезать картинку с авито, чтобы убрать водяной знак, пытаюсь это сделать, есть готовый вариант?
Добавил этот код в экш c#
вышла ошибка для переменных img, result не найдены вызовы метода Dispose()
в чем причина не подскажите?
 

Radzhab

Client
Регистрация
23.05.2014
Сообщения
1 500
Благодарностей
1 268
Баллы
113
img.Dispose() добавь
 

sekoan

Client
Регистрация
04.01.2015
Сообщения
219
Благодарностей
92
Баллы
28
Пробую ошибку выдает также, а куда нужно добавить?
 

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