Tutorial Programação - Criação automática de XCF do JPG


Motivação 

gimp_jpg_to_xcf_popup.jpg
Embora seja fácil de fazer, abrir um arquivo Jpeg e salvá-lo no formato nativo do GIMP * .xcf é tedioso e consome tempo. Você também pode querer executar a mesma operação, como definir o espaçamento da grade como um exemplo, em todas as imagens importadas como parte do processo. Automatizar as partes do processo de edição que são as mesmas para cada imagem economiza tempo, produz resultados consistentes e permite que você concentre sua atenção na parte do processo de edição de imagens que realmente precisa da sua atenção.
Este tutorial é um exemplo de script que pretende ilustrar a parte de automatização do processo de edição. O script abre todas as imagens Jpeg no diretório de origem e as salva como arquivos xcf no diretório de destino. Este não é um tutorial básico de script, uma compreensão básica da escrita de scripts GIMP é assumida.

Requisitos que são diferentes da maioria dos scripts. 

  1. O script precisa estar disponível e ser executado quando não houver imagem aberta.
  2. O script deve ser capaz de fornecer uma GUI para identificar os diretórios Origem e Destino, identificar todos os arquivos jpg no diretório de origem e convertê-los.
  3. O script precisa estar ciente do tipo de sistema operacional da máquina host ou, mais especificamente, se o separador de nome de arquivo é “” ou “/”.
  4. O script deve ser inteligente o suficiente para não sobrescrever o trabalho em andamento (arquivos Xcf com o mesmo nome no diretório de destino).
Vamos analisar o primeiro requisito , para poder executar o script sem uma imagem aberta. Estamos trabalhando em um grupo de várias imagens, não apenas uma, e como queremos iniciar nosso script a partir de um ponto de conhecimento, não queremos ter uma imagem aberta para edição, apenas a estrutura ou aplicativo do GIMP .
A disponibilidade de um script de dentro do aplicativo GIMP é estabelecida e controlada dentro do bloco script-fu-register. Após o nome da função, há um conjunto ordenado de sequências de informações necessárias seguidas por um número opcional de declarações de widget da GUI que podem alimentar informações selecionadas para o script. As cadeias necessárias são:
  1. Nome da Função - Corresponde ao nome da função na declaração de abertura 'define'.
  2. Rótulo do Menu - O rótulo identificando a função nos menus e a maneira de invocar o script.
  3. Descrição - A descrição que será exibida sobre o script no Navegador de procedimentos.
  4. Autor - Nome do Autor
  5. Copyright - Informações sobre direitos autorais.
  6. Data de criação - Data em que você escreveu o script.
  7. Tipo de Imagem Válida - O tipo de imagem que o script pode trabalhar.
O conteúdo do Tipo de Imagem Válida é o modo como especificamos se podemos executar o script sem uma imagem aberta. Você pode se sentir tentado a usar um tipo de imagem “*” para especificar a execução de todo o tempo, mas isso não é bem o que acontece. O “Tipo de Imagem Válida” é uma forma de restringir a execução do script em um contexto não intencional, “*” é a maneira de especificar “qualquer imagem aberta”. O que queremos, em vez disso, é uma string vazia - “” - para especificar a execução sem uma imagem aberta. O bloco de registro para a versão script-fu do programa seria semelhante (o bloco de registro do Python segue um padrão similar):

Bloco de registro 

  ( script-fu-register "script-fu-exemplo-jpg-para-xcf" ; Nome da Função
    "1) Importar JPG para XCF (Diretório)" ;  Rótulo do Menu
    "Este script é um script interativo para converter todos os jpegs
 em um diretório de origem em arquivos no formato GIMP xcf em um destino
 diretório.  O script foi projetado para ser executado SEM QUALQUER IMAGEM
 CARREGADO.  É executado a partir do shell do GIMP no Linux e no Windows. "
    "Stephen Kiel" ;  Autor
    "2013, Stephen Kiel" ;  direito autoral
    "Julho de 2013" ;  Data de criação
    ** "" ;  Tipo de imagem válido - não é necessária imagem **
     ;  Na verdade, não queremos que nenhuma imagem seja aberta quando executarmos essa
     ;  script, por isso deve estar disponível a partir do menu quando um
     ;  imagem não está carregada.  Este script determinará os IDs
     ;  da imagem e Drawable em vez de tê-los
     ;  passado como parâmetros.
    ;  Widgets Interativos
    SF-DIRNAME "JPG Originals (source) Directory" ""
    SF-DIRNAME "XCF Working (target) Directory" ""
 ) ;  Terminar script-fu-register
 ( script-fu-menu-register 
    "script-fu-exemplo-jpg-para-xcf" "<Image> / Example-Scm" )
A imagem abaixo mostra itens de menu com e sem uma imagem carregada. Os itens de menu numerados 1 e 2 têm tipo de imagem = "" . Os itens numerados 3 e 4 possuem tipo de imagem = “*” .

Menus de Função 

Menu Compare - Tipos de imagem
Nosso segundo requisito , para poder usar a GUI para navegar até nosso diretório de arquivo de origem Jpeg e nosso diretório de arquivo de destino Xcf, é tratado primeiro no bloco de registro usando os widgets “ SF - DIRNAME ” para rotular os campos de seleção da GUI e passar coletou os resultados como entradas para o script (acima). Uma vez que tenhamos os nomes de caminho para nossos diretórios de origem e destino, usaremos a função “ file-glob ” (os.listdir em python-fu) dentro do programa principal para criar uma lista de todos os arquivos de imagem nesses diretórios.
Abordamos o terceiro requisito de determinar o tipo de sistema operacional dentro da própria função. Queremos que a função seja portátil, para que possa ser executada na unidade de desktop Linux que você tem em sua casa ou no laptop Windows que você executa na estrada. Precisamos conhecer o tipo de sistema operacional para determinar o separador do nome do caminho, seja um "" ou "/", e lidar com isso no script.
Felizmente, uma vez que tenhamos o nome do caminho para o diretório de origem, é fácil determinar qual sistema operacional o gerou usando a função “ strbreakup ” do script-fu. Podemos comparar o número de peças quebrando o caractere "/" e "" e usar o resultado com o maior número de peças para determinar o sistema operacional da plataforma. Se estivermos usando a linguagem de script python-fu, podemos verificar o valor de os.name diretamente.

Script-fu file-glob e strbreakup 

  ( isLinux ( > ( length ( strbreakup sourceDirectory "/" ) ) ( comprimento ( strbreakup sourceDirectory "\\" ) ) ) ) ;  Padrão de caminho / arquivo de formulárioFonte com base no SO ( patternSource ( se isLinux ( sourceDirectory de seqüência de caracteres de anexo ) /*.[jJ][pP][gG] " ) ( sourceDirectory de seqüência de caracteres de seqüência de caracteres " \\ *. [JJ] [pP] [ gG] " ) ) ) ( patternTarget ( se isLinux ( targetDirectory de anexação de string " /*.[xX][cC][fF] " ) ( targetDirectory de anexação de string " \\ *. [xX] [cC] [fF] " ) ) ) ;  Lista de arquivos a serem convertidos formatados para o Host atual ;  O / S ( filelistSource ( cadr ( file-glob padrãoSource 1 ) ) ) ( filelistExists ( cadr ( file-glob patternTarget 1 ) ) ) 
Nosso quarto requisito para não sobrescrever os arquivos * .xcf existentes, que podem ter trabalhos em progresso em andamento, é resolvido com a construção de uma lista de arquivos no diretório de destino e a verificação da existência da lista antes de gravar cada novo arquivo.

Conclusão 

O script de exemplo de trabalho é bem direto; construindo uma lista de nomes de arquivos, percorrendo essa lista em um loop, abrindo cada arquivo de origem e exportando-o por sua vez. Uma versão python-fu equivalente também está incluída.Você deve ser capaz de usar este exemplo como um modelo para construir funções similares, exemplos de funções similares podem ser converter um diretório de arquivos xcf em arquivos jpg, escalar arquivos jpg originais para um tamanho menor, etc.
Ao usar os widgets do GIMP para navegar pelo sistema de arquivos, você provavelmente precisará selecionar "Outro" para navegar onde realmente deseja. Ao usar um script automatizado, é sempre uma boa idéia executar em uma cópia de suas imagens originais.

Os scripts 

Os scripts a seguir são as versões script-fu e python-fu da função Jpg para Xcf discutidas acima.

script-fu-example-jpg-para-xcf.scm 

 ;  Arquivo = example-jpeg-to-xcf.py ;  ;  Este programa é software livre: você pode redistribuí-lo e / ou modificá-lo ;  sob os termos da Licença Pública Geral GNU publicada por ;  a Fundação do Software Livre;  tanto a versão 3 da licença, ou ;  (a seu critério) qualquer versão posterior.  ;  ;  Este programa é distribuído na esperança de que seja útil ;  mas SEM QUALQUER GARANTIA;  sem mesmo a garantia implícita de ;  COMERCIABILIDADE OU ADEQUAÇÃO A UM DETERMINADO FIM.  Veja o ;  GNU General Public License para mais detalhes.  ;  ;  Você deve ter recebido uma cópia da Licença Pública Geral GNU ;  junto com este programa.  Se não, veja <http://www.gnu.org/licenses/>.  ;  ; = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = ;;;  Função - script-fu-example-jpg-para-xcf ;;;  ;;;  Converte todas as imagens jpeg no diretório selecionado para o GIMP xcf ;;;  formato.  ;;;  ;;;  Nome do arquivo Caso insensível.  (converte xyz.jpg ou XYZ.JPG) ;;;  ;;;  Programa interativo a ser executado SEM IMAGEM CARREGADA.  ;;;  ;;;  O programa solicita uma fonte (jpgs) e um destino (xcfs) ;;;  diretórios.  ;;;  ;;;  O programa é executado no Linux ou Windows Host O / S, usando o ;;;  caminho apropriado - separador de nome de arquivo ("/" ou "\").  ;;;  ; = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = ( define ( script-fu-exemplo-jpg-para-xcf sourceDirectory targetDirectory ) ( let * ( ; Declare e Variáveis ​​locais de inicialização ( returnVal #f ) ; Adivinha host sistema operacional baseado no separador de caminho de diretório ( isLinux ( > ( length ( strbreakup sourceDirectory "/" ) ) ( comprimento ( strbreakup sourceDirectory "\\" ) ) ) ) ; caminho do formulário / arquivo patternSource baseado em SO ( patternSource ( se isLinux ( string-append sourceDirectory ) /*.[jJ][pP][gG] " ) ( string-append sourceDirectory " \\ *. [jJ] [pP] [gG] " ) ) ) ( patternTarget ( se isLinux ( targetDirectory de anexação de string ) /*.[xX][cC][fF] " ) ( targetDirectory de seqüência de caracteres de acréscimo " \\ *. [xX] [cC] [fF] " ) ) ) ; Lista de arquivos a serem convertidos formatados para o Host atual ; O / S ( filelistSource ( cadr ) ) ( filelistExists ( cadr ( file-glob padrãoTarget 1 ) ) ) ( checkFileExists filelistExists ) ; - atualizado por imagem ( theImage 0 ) ( theDrawable 0 ) ( c  urrentFile "" ) ( baseName "" ) ( outFilename "" ) ;  Constantes usadas para atribuir valores a parasitas em nova imagem ( doIt #t ) ( checkFile "" ) ) ;  Declaração final de variáveis ​​locais ;  ;  Executar se as imagens forem fechadas, mensagem se não.  ( if ( < 0 ( car ( gimp-image-list ) ) ) ( gimp-mensagem "Close open Images & Rerun" ) ( begin ;; Run dentro do escopo de let * e variáveis ​​locais ; 'baseName' é nome do arquivo sem .jpg extension ; 'outFilename' é nome do arquivo com extensão .xcf ; passo através de cada arquivo em lista com while loop. ( while ( não ( null? filelistSource ) ) ( set! doIt #t ) ( set! checkFileExists filelistExists ) ( set! currentFile ( car filelistSource ) ) ; Abra e obtenha a ID de imagem do arquivo atual ( set! theImage ( car ( gimp-file-load RUN-NONINTERACTIVE currentFile currentFile ) ) ) ( se isLinux ; Caminho caminho-nome do arquivo se o SO do host for Linux ( begin) set! baseName ( car ( reverso ( strbreakup currentFile "/" ) ) ) ) ( set! baseName ( car ( nome_da_firmação base_ "." ) ) ) ( set! outFilename ( diretório_do_endereço_stringup "/" baseName ".xcf" ) ) ) ; End begin - O sistema operacional host é Linux ; Caminho path-filename se o sistema operacional do host for Windows ( begin ( set! BaseName ( car ( reverso ( strbreakup currentFile "\\" ) ) ) ) ( set! BaseName ( c  ar ( strbreakup baseName "." ) ) ) ( conjunto!  outFilename ( targetDirecty " string-append " "\\" baseName ".xcf" ) ) ) ;  End begin - se o sistema operacional host for o Windows ) ;  End if isLinux ;  Verifique se outFilename existe para que não sobrescrevamos ( while ( não ( null? CheckFileExists ) ) ( set! CheckFile ( car checkFileExists ) ) ( se ( string =? OutFilename checkFile ) ( conjunto! DoIt #f ) ) ( conjunto ! checkFileExists ( cdr checkFileExists ) ) ) ;  End while checkFileExists ( se doIt ( begin ; ID Drawable Get / set, precisa dele para salvar arquivo. ( Set! TheDrawable ( car ( gimp-imagem-merge-visible-layers theImage 0 ) ) ) ; Salvar arquivo - formato GIMP xcf ( gimp-xcf-save RUN-NONINTERACTIVE theImage theDrawable outFilename outFilename ) ) ; Fim de início ) ;  End if doIt ( gimp-image-delete theImage ) ;  Atualizar o parâmetro de iteração do loop ( set! FilelistSource ( cdr filelistSource ) ) ) ;  Terminar enquanto ) ;  Começo externo final ) ;  End outer if ( set! ReturnVal #t ) ) ;  Fim, deixe * ) ;  End define ; = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = ( script-fu-register "script-fu-exemplo-jpg-para-xcf" ; Nome da Função "1) Importar JPG para XCF (Diretório)" ;  Menu Label "Este script é um script interativo para converter todos os jpegs em um diretório de origem em arquivos no formato GIMP xcf em um diretório de destino . O script foi projetado para ser executado SEM QUALQUER IMAGEM CARREGADA. É executado no shell do GIMP no Linux e Windows. "  "Stephen Kiel" ;  Autor "2013, Stephen Kiel" ;  Copyright "julho de 2013" ;  Data de criação "" ;  Tipo de Imagem Válida - Sem Imagem requerida ;  Na verdade, não queremos que nenhuma imagem seja aberta quando executarmos isso ;  script, por isso deve estar disponível no menu quando um ;  imagem não está carregada.  Este script determinará os IDs ;  da imagem e Drawable em vez de tê-los ;  passado como parâmetros.  ;  Widgets interativos SF-DIRNAME "JPG Originals (fonte) Diretório" "" SF-DIRNAME "XCF Trabalhando (destino) Diretório" "" ) ;  Terminar script-fu-register ( script-fu-menu-register "script-fu-exemplo-jpg-para-xcf" "<Image> / Exemplo-Scm" ) ; = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = 

example-jpeg-to-xcf.py 

  #!  / usr / bin / env python
 #
 # File = example-jpeg-to-xcf.py
 #
 # Este programa é software livre: você pode redistribuí-lo e / ou modificar
 # sob os termos da Licença Pública Geral GNU publicada por
 # a Free Software Foundation;  quer a versão 3 da licença, quer
 # (a seu critério) qualquer versão posterior.
 #
 # Este programa é distribuído na esperança de que seja útil,
 # mas SEM QUALQUER GARANTIA;  sem mesmo a garantia implícita de
 # COMERCIABILIDADE ou ADEQUAÇÃO A UM DETERMINADO FIM.  Veja o
 # GNU General Public License para mais detalhes.
 #
 # Você deveria ter recebido uma cópia da Licença Pública Geral GNU
 # junto com este programa.  Se não, veja <http://www.gnu.org/licenses/>.
 #
 ################################################## ##########################
 #
 de gimpfu import *
 importar os
 importação re
 #
 def exampleJpgToXcf ( srcPath , tgtPath ):
     "" "Exemplo de função registradaJpgToXcf, Converte todos os
 jpegs no diretório de origem em arquivos xcf em um destino
 diretório.  Requer dois argumentos, os caminhos para a fonte e
 diretórios de destino.  NÃO requer que uma imagem esteja aberta.
 "" "
     ###
     open_images , image_ids = pdb .  gimp_image_list ()
     se open_images > 0 :
         pdb .  gimp_message ( "Close open Images & Rerun" )
     else :
         # lista todos os arquivos nos diretórios de origem e de destino
         allFileList = os .  listdir ( srcPath )
         existingList = os .  listdir ( tgtPath )
         srcFileList = []
         tgtFileList = []
         xform = re .  compile ( '\ .jpg' , re . IGNORECASE )
         # Encontre todos os arquivos jpeg na lista e crie os nomes dos arquivos xcf
         para fname em allFileList :
             fnameLow = fname .  inferior ()
             se fnameLow .  count ( '.jpg' ) > 0 :
                 srcFileList .  acrescentar ( fname )
                 tgtFileList .  acrescentar ( xform . sub ( '.xcf' , fname ))
         # Dicionário - nomes de arquivos de origem e de destino
         tgtFileDict = dict ( zip ( srcFileList , tgtFileList ))
         # Loop em jpegs, abra cada um e salve como xcf
         para srcFile em srcFileList :
             # Não sobrescrever existente, pode ser um trabalho em andamento
             se tgtFileDict [ srcFile ] não estiver em existingList :
                 # os.path.join insere o tipo certo de separador de arquivos
                 tgtFile = os .  caminho .  join ( tgtPath , tgtFileDict [ srcFile ])
                 srcFile = os .  caminho .  join ( srcPath , srcFile )
                 theImage = pdb .  file_jpeg_load ( srcFile , srcFile )
                 theDrawable = theImage .  active_drawable
                 pdb .  gimp_xcf_save ( 0 , theImage , theDrawable , tgtFile , tgtFile )
                 pdb .  gimp_image_delete ( theImage )
 #
 ################################################## ##########################
 #
 registrar (
     "exampleJpgToXcf" , # Name registrado no Navegador de procedimentos
     "Converter arquivos jpg para xcf" , título do # Widget
     "Converta arquivos jpg em xcf" , #
     "Stephen Kiel" , # Autor
     "Stephen Kiel" , # Detentor dos direitos autorais
     "Julho de 2013" , # Date
     "1) Importar JPG para XCF (Diretório)" , # Menu Entrada
     "" , # Tipo de imagem - nenhuma imagem exigida
     [
     ( PF_DIRNAME , "srcPath" , "Originais JPG (fonte) Diretório:" , "" ),
     ( PF_DIRNAME , "tgtPath" , "XCF Working (target) Directory:" , "" ),
     ]
     []
     exampleJpgToXcf , # Corresponde ao nome da função que está sendo definida
     menu = "<Image> / Example-Py" # Localização do Menu
     ) # End register

 main ()

Comentários

Postagens mais visitadas deste blog

James Bond 007 – Coleção Completa Dublado Torrent (1962-2015)

Coleção Resident Evil Torrent – BluRay Pt/Br

Photoshop 2018 EM PORTUGUÊS + CRACK