@para_noir_in_my_box

Есть ли программа для пакетной обработки изображений, которая сможет сделать из прямоугольной фотки квадратную и отцентрует?

Добрый день.

Есть 2-5 ГБ изображений. Самых разных.

Необходимо:
1. Уменьшить до нужного квадратного размера.
2. Отцентровать.

Изображения не должны стать искажены.
  • Вопрос задан
  • 10600 просмотров
Решения вопроса 1
ruFelix
@ruFelix
Предсказание будущего по руке, таро, кофе.
Я всегда делал такое в фотошопе.

1) Открываете одну картинку
2) Жмёте на REC в окошке action
3) Делаете ресайз открытой картинки и жмёте стоп
4) Где то в меню File находите команду Batch, в открывшимся окне нужно выбрать тот action который вы записали, и папку где лежат ваши картинки.

Прелесть в том что при ззаписи action можно добавить любое количество действий над картинков, например автоконтраст, автолевел, добавление копирайта, рамочек, фильтры и т.д.

Другой вариант в фотошопе с каких то версий появилась такая штука File > Scripts > Image Processor - это просто ресайз папки картинок
Ответ написан
Пригласить эксперта
Ответы на вопрос 8
egor_nullptr
@egor_nullptr
bash + imagemagick
Ответ написан
IonDen
@IonDen
JavaScript developer. IonDen.com
irfanview -> batch resize
Ответ написан
Комментировать
Может я что-то путаю, но как из прямоугольной можно сделать квадратную без искажения? Если только обрезать. Если это ваш случай, то вот - XnView . Там пакетная обработка файлов, все просто, наглядно , быстро и бесплатно.
Ответ написан
Комментировать
DikSoft
@DikSoft
Начинал с командной строки MSDOS 3.30 )
Lazarus (www.lazarus.freepascal.org/index.php) в руки, итоговую картинку на форму, брать исходную, обрабатывать этой вот процедурой. Смысл, думаю, понятен. Если нужно - могу выложить все исходники.
Procedure TForm1.StretchFine(inPicture: TPicture; OutImage: TImage);
Var A, B, X, Y, X1, Y1, DX, DY: integer;
  r1, r2            : real;
  StretchFineImage  : TImage;
Begin
  A := OutImage.width;
  B := OutImage.height;
  StretchFineImage := TImage.Create(Nil);
  StretchFineImage.width := a;
  StretchFineImage.height := b;
  StretchFineImage.left := 0;
  StretchFineImage.Top := 0;
  X := InPicture.width;
  Y := InPicture.height;

  R1 := X / Y;                          //соотношение в исходной картинке
  R2 := A / B;                          //   --       в итоговой картинке

  If r1 > r2 Then Begin
    x1 := A;
    y1 := trunc(A / X * Y);
  End Else Begin
    x1 := trunc(B / Y * X);
    y1 := b;
  End;
  Dx := trunc((a - x1) / 2);
  Dy := trunc((b - y1) / 2);
  StretchFineImage.Canvas.Brush.Color := clWhite;
  StretchFineImage.Canvas.FillRect(rect(0, 0, a, b));
  StretchFineImage.Canvas.StretchDraw(rect(Dx, Dy, a - Dx, b - Dy), InPicture.Graphic);

  OutImage.Picture := StretchFineImage.Picture;
  StretchFineImage.Free;
  StretchFineImage := Nil;
End;
Ответ написан
Комментировать
r1d2
@r1d2
Product manager
Если есть Photoshop, то можно создать дроплет под эту задачу.
Ответ написан
Комментировать
allexb
@allexb
App.Virtualization & Packaging
Создать action в Photoshop.
Ответ написан
Комментировать
TTA
@TTA
Мутировавший технарь :)
FSResizer. Очень простая и умеет дофига.
Ответ написан
Комментировать
eps
@eps
Превратить прямоугольную картинку в квадратную можно несколькими способами:
— Обрезать края картинки до квадрата
— Добавить чёрные / белые поля до квадрата
— Непропорционально растянуть
— Алгоритмом liquid rescale / seam carving

В любом случае (кроме второго) картинка будет искажена. Подробнее о способах уменьшения можно посмотреть на www.imagemagick.org/Usage/resize

И, конечно, ImageMagick вам поможет с любым сценарием.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы