Чем ускорить процесс удаления части изображения?

inilim

Client
Регистрация
16.09.2017
Сообщения
446
Благодарностей
170
Баллы
43
Ребят, может кто подскажет как ускорить процесс удаления части изображения.

Нужен софт ( или дополнение к софту ) который дает возможность просто ставить две координаты (Два клика или выделение), и софт сам между этими координатами удаляет изображение на всю ширину. Оставшиеся части просто схлопываются друг с другом. Вручную это делать ОЧЕНЬ долго.
Изображения разных размеров, удаление будет производится в любом месте многочисленно раз.

Обрабатываю по 1000 картинок в день, в фотошопе это очень долго, экшены не спасут (проверено) :(
Обращался почти на все возможные форумы и сайты. Все утверждают что готового решения нет, нужно разрабатывать, что звучит пи**ец как тупо.
 

Gfoblin

Client
Регистрация
30.05.2013
Сообщения
4 596
Благодарностей
1 014
Баллы
113
не катит?
быстрое кадрирование фото - мне кажется надо гуглить...
 

inilim

Client
Регистрация
16.09.2017
Сообщения
446
Благодарностей
170
Баллы
43
@Gfoblin Вы хоть пост до конца прочитали?
Данное видео даже близко не стояло к решению задачи.

Извиняюсь за пошлость!

 

Gfoblin

Client
Регистрация
30.05.2013
Сообщения
4 596
Благодарностей
1 014
Баллы
113
@Gfoblin Вы хоть пост до конца прочитали?
Данное видео даже близко не стояло к решению задачи.

Извиняюсь за пошлость!

Да на примере понятнее :-)
Решение: IM+php (другой язык) под заказ :-)
 

inilim

Client
Регистрация
16.09.2017
Сообщения
446
Благодарностей
170
Баллы
43

Astraport

Client
Регистрация
01.05.2015
Сообщения
4 983
Благодарностей
4 433
Баллы
113
Если я правильно понял задание, то стандартными C# методами по работе с битмапой можно решить.
 

inilim

Client
Регистрация
16.09.2017
Сообщения
446
Благодарностей
170
Баллы
43
@Astraport Решается на любом языке, дело в том что готового решение не находится. Оно есть, уверен, инфа сотка!
 

Gfoblin

Client
Регистрация
30.05.2013
Сообщения
4 596
Благодарностей
1 014
Баллы
113

inilim

Client
Регистрация
16.09.2017
Сообщения
446
Благодарностей
170
Баллы
43

dr1veq

Пользователь
Регистрация
09.02.2018
Сообщения
39
Благодарностей
44
Баллы
18
2 координаты высоты изображения, обрезка между ними и потом склейка? и сохранение изображения? Нужны еще действия?
 

inilim

Client
Регистрация
16.09.2017
Сообщения
446
Благодарностей
170
Баллы
43
Последнее редактирование:

dr1veq

Пользователь
Регистрация
09.02.2018
Сообщения
39
Благодарностей
44
Баллы
18
вроде-бы нет, вы что то задумали? :-)
Код:
int firstPoint = 150; // 1 точка высоты для обрезки
int secondPoint = 300; // 2 точка высоты для обрезки (обрезает с 150 по 300)
Bitmap bmp1 = new Bitmap(Image.FromFile(@"D:\1.jpg")); // Фото исходник
int width = bmp1.Width;
int height = bmp1.Height;
int newHeight = height - (secondPoint - firstPoint);

Image img = new Bitmap(width,newHeight);
Graphics g = Graphics.FromImage(img);

Bitmap bmp2 = bmp1.Clone(new Rectangle(0, 0, width, firstPoint), bmp1.PixelFormat);
g.DrawImage(bmp2, new Point(0, 0));
Bitmap bmp3 = bmp1.Clone(new Rectangle(0, secondPoint, width, (height - secondPoint)),bmp1.PixelFormat);
g.DrawImage(bmp3, new Point(0, firstPoint));
img.Save(@"D:\33.jpg", System.Drawing.Imaging.ImageFormat.Jpeg); // Сохранение изобр. 33.jpg на диск D:
Попробуйте, вроде работает. Думаю сами прикрутите входные данные и цикл.
 
  • Спасибо
Реакции: inilim

inilim

Client
Регистрация
16.09.2017
Сообщения
446
Благодарностей
170
Баллы
43
Попробуйте, вроде работает.
Код:
using System;

namespace Sample
{
    class Program
    {
      
        static void Main(string[] args)
        {
            int firstPoint = 1; // 1 точка высоты для обрезки
            int secondPoint = 85; // 2 точка высоты для обрезки (обрезает с 150 по 300)
            Bitmap bmp1 = new Bitmap(Image.FromFile(@"C:\Users\home\Desktop\111\screencapture-00_29_36.jpg")); // Фото исходник
            int width = bmp1.Width;
            int height = bmp1.Height;
            int newHeight = height - (secondPoint - firstPoint);
            
            Image img = new Bitmap(width,newHeight);
            Graphics g = Graphics.FromImage(img);
            
            Bitmap bmp2 = bmp1.Clone(new Rectangle(0, 0, width, firstPoint), bmp1.PixelFormat);
            g.DrawImage(bmp2, new Point(0, 0));
            Bitmap bmp3 = bmp1.Clone(new Rectangle(0, secondPoint, width, (height - secondPoint)),bmp1.PixelFormat);
            g.DrawImage(bmp3, new Point(0, firstPoint));
            img.Save(@"C:\Users\home\Desktop\111\33.jpg", System.Drawing.Imaging.ImageFormat.Jpeg); // Сохранение изобр. 33.jpg на диск D:
            Console.ReadKey();
        }
    }
}
какие классы требуется импортировать?
 
Последнее редактирование:

inilim

Client
Регистрация
16.09.2017
Сообщения
446
Благодарностей
170
Баллы
43
Думаю сами прикрутите входные данные и цикл.
Вы наверно подумали что мне нужно массово все картинки обрезать под одними координатами для ZP. Нет ZP и рядом не стоит. Поэтому мы и в оффтопе. Мне каждую картинку нужно индивидуально просматривать и решить что удалить. :-) Но ваше решение попробую использовать по другому.
 

dr1veq

Пользователь
Регистрация
09.02.2018
Сообщения
39
Благодарностей
44
Баллы
18
  • Спасибо
Реакции: inilim

inilim

Client
Регистрация
16.09.2017
Сообщения
446
Благодарностей
170
Баллы
43

dr1veq

Пользователь
Регистрация
09.02.2018
Сообщения
39
Благодарностей
44
Баллы
18
Без ссылки работает, благодарю за код. Вот теперь мне бы интерфейс придумать :-)
ну самый простой способ наверное будет заганять фотки в цикле в picturebox, на них отмечать координаты и обрезать.
Координаты можно получать так:
Код:
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
        {
            int x =e.X; // координата по оси X
            int y = e.Y; // координата по оси Y
        }
 
  • Спасибо
Реакции: inilim

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