it-swarm-pt.tech

O GIMP pode dividir uma imagem em várias imagens?

Estive digitalizando muitas fotos recentemente, mais de uma por vez. Agora tenho vários JPEGs, cada um contendo várias fotos.

No GIMP, posso "dividir" um jpg em três arquivos menores?

O que eu costumava fazer é: copiar o jpg 3 vezes e cortar uma imagem diferente em cada cópia.

Deve haver uma maneira mais fácil de fazer isso!

EDIT: Existe um plugin que pode fazer isso? Eu olhei em volta, mas só encontrei plugins que "cortam" uma imagem em pedaços do mesmo tamanho.

20
Manu

ImageMagick . É uma ferramenta de linha de comando, mas incrivelmente poderosa e flexível, portanto vale o esforço para aprendê-la. Por exemplo:

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

Onde:

  • 1024x1024 é a largura e a altura da colheita necessária
  • + 0 + 0 são deslocamentos xey na imagem original

Você pode colar dezenas desses comandos em um arquivo .cmd e executá-los sem esforço.

Veja a documentação do ImageMagick para ver que existem milhares de opções para esses comandos. Uma ferramenta muito poderosa e de código aberto também!

22
Zond

Você pode fazer assim:

  • Retângulo selecione uma imagem
  • Editar -> Copiar
  • Editar -> Colar como -> Nova imagem
15
Michael Borgwardt

Colar de Michael como -> Nova imagem funciona, mas geralmente uso Recortar em vez de Copiar para não duplicar o conteúdo.

6
Bob Weber

Você pode dividir uma imagem no GIMP em uma linha de coluna com linhas de guia e a ferramenta guilhotina (cortador de papel). From Manual do Usuário do GIMP :

Além da grade de imagens, o GIMP também oferece um tipo mais flexível de auxílio ao posicionamento: guias. Estas são linhas horizontais ou verticais que você pode exibir temporariamente em uma imagem enquanto estiver trabalhando nela.

Para criar um guia, basta clicar em uma das réguas na janela de imagem e puxar uma guia, mantendo o botão do mouse pressionado. O guia é exibido como uma linha tracejada azul, que segue o ponteiro. Assim que você cria um guia, a ferramenta "Mover" é ativada e o ponteiro do mouse muda para o ícone Mover.

O comando Guilhotina corta a imagem atual com base nos guias da imagem. Ele corta a imagem ao longo de cada guia, semelhante a fatiar documentos em um escritório com uma guilhotina (cortador de papel) e cria novas imagens a partir das peças. Você pode acessar este comando na barra de menus da imagem através de Imagem -> Transformar -> Guilhotina .

6
Milche Patern

Estou usando o plug-in Dividir Imagens Digitalizadas , que funciona bem.

ATUALIZAÇÃO: https://github.com/FrancoisMalan/DivideScannedImages

5
Raymond

Para torná-lo rápido, você pode usar:

CtrlD duplicar a imagem
ShiftC cortar as imagens
CtrlS salvar

5
nekrum

Eu escrevi um plugin Gimp simples para salvar a seleção atual como JPG (qualidade fixa).

Isso requer que você selecione manualmente cada fotografia. Os nomes dos arquivos de saída são gerados automaticamente.

Obtê-lo/modificar em GitHub

Screenshot

Input vs output

2
Andy Joiner

Eu criei um script com base na resposta de Zond. Ele exibirá seu arquivo de imagem de acordo com os parâmetros de entrada do usuário. O script é o seguinte:

# 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!

O script funciona com "sh" e a ferramenta "convert" do ImageMagick. Não tenho certeza se o cmd do windows fornece sh de maneira nativa; nesse caso, pode-se dar uma olhada em este tópico para que o sh funcione. Além disso, o ImageMagick deve estar instalado no sistema e um atalho para a ferramenta de conversão na mesma pasta na qual o script será executado.

  • Testei apenas com imagens png. Espero que ajude.
1
Vitor

Script Vitor para linux com sh. Eu só tive que mudar três linhas.

#!/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!
0
Jean

Aqui está outra: Divida uma única imagem em quatro. Os valores devem ser inseridos manualmente no script abaixo, dependendo do tamanho da imagem original. Use a ferramenta ImageMagick "identificar" ou a ferramenta "arquivo" para verificar a largura e a altura da imagem original.

Consulte opções de linha de comando para '-extract' para ver como uma 'geometria' é especificada.

#!/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
0
David Tonhofer