Czy GIMP może podzielić obraz na wiele obrazów?

20

Ostatnio skanowałem wiele zdjęć, więcej niż jedno na raz. Mam teraz wiele plików JPEG, z których każde zawiera wiele zdjęć.

Czy mogę, używając GIMP, „podzielić” plik JPG na 3 mniejsze pliki?

To, co kiedyś robiłem, to: skopiuj plik jpg 3 razy i przytnij inny obraz w każdej kopii.

Musi być łatwiejszy sposób na zrobienie tego!

EDYCJA: Czy istnieje wtyczka, która może to zrobić? Rozejrzałem się, ale znalazłem tylko wtyczki, które „pocięły” obraz na kawałki o równej wielkości.

Manu
źródło
czy możesz zamieścić przykładową strukturę obrazu? To, czego szukam, to to, czy zdjęcia są oddzielone pustą przestrzenią lub połączone między sobą ...
James Mertz 25.10

Odpowiedzi:

21

ImageMagick . Jest to narzędzie wiersza polecenia, ale niezwykle wydajne i elastyczne, dlatego warto się go nauczyć. Na przykład:

convert -extract 1024x1024+0+0 original.png target.png

Gdzie:

  • 1024x1024 to szerokość i wysokość wymaganego zbioru
  • + 0 + 0 to przesunięcia x i y do oryginalnego obrazu

Możesz umieścić dziesiątki tych poleceń w pliku .cmd i uruchomić je bez wysiłku.

Przejrzyj dokumentację ImageMagick, aby zobaczyć, że istnieją tysiące opcji tych poleceń. Bardzo potężne narzędzie i open source też!

Zond
źródło
1
W jaki sposób ImageMagick jest powiązany z Gimpem?
Milche Patern
15

Możesz to zrobić w następujący sposób:

  • Prostokąt wybierz obraz
  • Edycja -> Kopiuj
  • Edycja -> Wklej jako -> Nowy obraz
Michael Borgwardt
źródło
6

Wklej Michaela jako -> Nowy obraz działa, ale ogólnie używam Wytnij zamiast Kopiuj, więc nie powielam treści.

Bob Weber
źródło
6

Możesz podzielić obraz w GIMP w sposób wiersz-kolumna za pomocą wierszy prowadzących i gilotyny (obcinarki papieru). Z instrukcji użytkownika GIMP :

Oprócz siatki obrazów GIMP oferuje również bardziej elastyczny rodzaj pomocy przy pozycjonowaniu: prowadnice. Są to poziome lub pionowe linie, które można tymczasowo wyświetlić na obrazie podczas pracy nad nim.

Aby utworzyć przewodnik, po prostu kliknij jedną z linijek w oknie obrazu i wyciągnij przewodnik, trzymając naciśnięty przycisk myszy. Przewodnik jest następnie wyświetlany jako niebieska linia przerywana, która podąża za wskaźnikiem. Po utworzeniu przewodnika narzędzie „Move” jest aktywowane, a wskaźnik myszy zmienia się w ikonę Move.

Polecenie Gilotyna dzieli na plasterki bieżący obraz na podstawie prowadnic obrazu. Tnie obraz wzdłuż każdej prowadnicy, podobnie jak krojenie dokumentów w biurze za pomocą gilotyny (obcinarki papieru) i tworzy nowe obrazy z kawałków. Możesz uzyskać dostęp do tego polecenia z paska menu obrazu poprzez Obraz -> Przekształć -> Gilotyna .

Milche Patern
źródło
dzięki, to działa dobrze dla moich pasków filmowych. Najpierw uprawiam gorliwą uprawę, aby ułatwić szybsze układanie przewodników
austin
5

Aby to zrobić szybko, możesz użyć:

Ctrl+, Daby powielić obraz
Shift+, Caby przyciąć zdjęcia
Ctrl+, Saby zapisać

nekrum
źródło
2

Napisałem prostą wtyczkę Gimp, aby zapisać bieżący wybór jako JPG (stała jakość).

Wymaga to ręcznego wybrania każdego zdjęcia. Nazwy plików wyjściowych są generowane automatycznie.

Pobierz / zmodyfikuj na GitHub

Zrzut ekranu

Wejście vs wyjście

Andy Joiner
źródło
1

Stworzyłem skrypt na podstawie odpowiedzi Zonda. Spowoduje to kafelkowanie pliku obrazu zgodnie z parametrami wejściowymi użytkownika. Skrypt wygląda następująco:

# Usage:
#
# sh crop.sh <tileset_image_file> <tileset_image_width> <tileset_image_height> <tile_size_X> <tile_size_y>
#
# Example:
#   sh crop.sh tileset01.png 128 192 32 32
#
# - Will generate 24 tiles of 32x32 named tile1.png, tile2.png, ..., tile24.png
#

# Your tileset file. I've tested with a png file.
origin=$1

# Control variable. Used to name each tile.
counter=0

# Location of the tool that we are using to extract the files. I had to create a shortcut of the tool in the same folder as the script.
program=convert.exe

# The size of the tile (32x32)
tile_size_x=$4
tile_size_y=$5

# Number of rows (horizontal) in the tileset.
rows=$2
let rows/=tile_size_x

# Number of columns (vertical) in the tileset.
columns=$3
let columns/=tile_size_y

# Tile name prefix.
prefix=tile

# Tile name sufix.
sufix=.png

echo Extracting $((rows * $columns)) tiles...

for i in $(seq 0 $((columns - 1))); do

    for j in $(seq 0 $((rows - 1))); do

        # Calculate next cut offset.
        offset_y=$((i * tile_size_y))
        offset_x=$((j * tile_size_x))

        # Update naming variable.
        counter=$((counter + 1))

        tile_name=$prefix$counter$sufix

        echo $program -extract $tile_size"x"$tile_size"+"$offset_x"+"$offset_y $origin $tile_name
        $program -extract $tile_size_x"x"$tile_size_y"+"$offset_x"+"$offset_y $origin $tile_name
    done
done
echo Done!

Skrypt działa z „sh” i narzędziem do konwersji z ImageMagick. Nie jestem pewien, czy Windows cmd zapewnia sh w natywny sposób, w tym przypadku można rzucić okiem na ten temat, aby sh działał. Ponadto ImageMagick musi być zainstalowany w systemie, a skrót do narzędzia do konwersji znajduje się w tym samym folderze, w którym skrypt zostanie uruchomiony.

  • Testowałem tylko z obrazami png. Mam nadzieję, że to pomoże.
Vitor
źródło
0

Oto kolejna: Podziel pojedynczy obraz na cztery. Wartości należy wprowadzić ręcznie w skrypcie poniżej, w zależności od tego, jak duży jest twój oryginalny obraz. Użyj narzędzia ImageMagick „Identyfikuj” lub „Plik”, aby sprawdzić szerokość i wysokość oryginalnego obrazu.

Zobacz opcje wiersza polecenia dla „-extract”, aby zobaczyć, jak określono „geometrię”.

#!/bin/bash

ORIGINAL=Integration_Tree.png

NEW_WIDTH=2598   # 1/2 of the original width
NEW_HEIGHT=1905  # 1/2 of the original height

NEW_SIZE="${NEW_WIDTH}x${NEW_HEIGHT}"
POS_IMG0="0+0"
POS_IMG1="${NEW_WIDTH}+0"
POS_IMG2="0+${NEW_HEIGHT}"
POS_IMG3="${NEW_WIDTH}+${NEW_HEIGHT}"

for X in 0 1 2 3; do
   VAR="POS_IMG${X}"
   NEW_GEOMETRY="${NEW_SIZE}+${!VAR}" # cunning use of bash variable indirection
   CMD="convert -extract ${NEW_GEOMETRY} \"${ORIGINAL}\" \"out${X}.png\""
   echo $CMD
   convert -extract ${NEW_GEOMETRY} "${ORIGINAL}" "out${X}.png"
   if [[ $? != 0 ]]; then
      echo "Some error occurred" >&2
      exit 1
   fi
done
David Tonhofer
źródło
0

Skrypt Vitora dla systemu Linux z sh. Musiałem tylko zmienić trzy linie.

#!/usr/bin/env sh
# Usage:
# sh crop.sh <tileset_image_file> <tileset_image_width> <tileset_image_height> <tile_size_X> <tile_size_y>
#
# Example:
#   sh crop.sh tileset01.png 128 192 32 32
#
# - Will generate 24 tiles of 32x32 named tile1.png, tile2.png, ..., tile24.png
#

# Your tileset file. I've tested with a png file.
origin=$1

# Control variable. Used to name each tile.
counter=0

# Location of the tool that we are using to extract the files. I had to create a shortcut of the tool in the same folder as the script.
program=convert

# The size of the tile (32x32)
tile_size_x=$4
tile_size_y=$5

# Number of rows (horizontal) in the tileset.
rows=$2
rows=$((rows / $tile_size_x))

# Number of columns (vertical) in the tileset.
columns=$3
columns=$((columns / $tile_size_y))

# Tile name prefix.
prefix=tile

# Tile name sufix.
sufix=.png

echo Extracting $((rows * $columns)) tiles...

for i in $(seq 0 $((columns - 1))); do

    for j in $(seq 0 $((rows - 1))); do

        # Calculate next cut offset.
        offset_y=$((i * tile_size_y))
        offset_x=$((j * tile_size_x))

        # Update naming variable.
        counter=$((counter + 1))

        tile_name=$prefix$counter$sufix

        echo $program -extract $tile_size"x"$tile_size"+"$offset_x"+"$offset_y $origin $tile_name
        $program -extract $tile_size_x"x"$tile_size_y"+"$offset_x"+"$offset_y $origin $tile_name
    done
done
echo Done!
Drelich
źródło