Criar extensão para photoshop, redimensionador de imagens, javascript
Criar extensão para photoshop, redimensionador de imagens, javascript
Publicado: Modificado:
Bom neste tutorial vamos ver como criar nossa primeira extensão para o photoshop utilizando javascript, extensões em geral são ótimas para a realização de tarefas repetitivas e cálculos avançados. Nesta que demostrarei neste artigo, será uma simples extensão que redimensiona imagens, somente para nosso primeiro aprendizado, ela terá uma pequena janela onde definimos a largura máxima da imagem, e a altura máxima, a extensão calculara a proporção para não distorcer a imagem e não exceder os valores máximos definidos, onde todas imagens landscape e portrait e as quadradas serão processadas ao mesmo tempo, após a definição dos tamanhos máximos e a seleção das imagens nenhuma interação com o usuário será necessária.Vou utilizar o Photoshop cs6, e o Adobe ExtendScript para programar, outros editores de textos podem ser utilizados porém utilizando o ExtendScript é muito mais fácil o debug da extensão.
Abra o photoshop e sem seguida o ExtendScript
Crie um novo Documento javascript, e no dropbox abaixo selecione o photoshop, o ícone de corrente deve ficar verde, isso indica que seu ExtendScript está conectado com o photoshop, possibilitando o debug.
Passo Vamos para o Código
Primeiramente vamos construir nossa janela, onde serão digitados os valores da largura e altura, utilize a classe Window para esta tarefa. Esta possui os métodos add(), show() e close().O método add(), adiciona um componente a nossa janela, static text, edit text, radio button, button, panel, check box dentre outros, o método show() como o próprio nome diz exibi a janela, e o close() a fecha. Veja abaixo:
Clique em f5 para debugar seu código, ou clique no botão play, se seu código estiver correto o photoshop irá exibir a janela.
Sua janela deve estar mais ou menos assim:
Vamos criar uma função, vou chama-lá de "start", está vai setar os valores da largura e da altura máxima para uma variáveis, vai abrir uma janela de seleção da imagens, para que o usuário possa selecionar as imagens a trabalhar.
Vamos criar a função "processFile", está irá de fato redimensionar a imagem e fechar o arquivo para nosso photoshop não consumir muita memoria, essa função não tem nada de muito especial, somente redimensiona as imagens obedecendo suas proporções, somente a algumas considerações a se explicar.
"app.activeDocument" -> Recupera o documento em foco no photoshop, ou seja, o que está a frente de todos.
"app.activeDocument.path" -> Recupera o caminho do arquivo, será útil para salvarmos nossas futuras imagens.
"app.activeDocument.name" -> Recupera o nome do arquivo, mesmo caso que o anterior, usaremos para salvar a futura imagem.
"app.activeDocument.width.as("px")" -> Recupera a largura do arquivo em pixels, você pode recuperar em cm,inch entre outros.
"app.activeDocument.height.as("px")" -> Recupera a altura do arquivo em pixels, você pode recuperar em cm,inch entre outros.
"app.activeDocument.resizeImage()" -> Redimensiona a imagem passando três parâmetros, largura, altura e resolução.
"(new Folder("path")).create()" -> Cria um novo diretório no caminho passado no construtor.
"app.activeDocument.close()" -> Fecha o arquivo.
Agora por fim criaremos a função que irá salvar nosso imagem em arquivo, no script pronto para o download so temos a função que salva em jpg, como vocês podem observar, em nosso "processFile" temos um "switch" que pode conter todos os formatos de imagem, e para cada destes formatos é necessário uma função especifica pois cada formato de imagem diferente temos que preparar o arquivo de forma especifica. Temos que usar um objeto especifico para cada formato e passar os parâmetros, no caso do jpg usaremos "new JPEGSaveOptions()" , e passaremos a qualidade, o mate, o perfil de cores, esses parâmetros podem ser observados quando se manda salvar um arquivo normalmente no photoshop, e uma janela aparece pedindo para setamos os valores.Veja imagem abaixo:
Nossa função ficará assim:
Destacando no código "doc.saveAs(saveFile, saveOp, false, Extension.LOWERCASE); "
onde:
"doc" -> É nosso "app.activeDocument"
"saveFile" -> new File("path")
"saveOp" -> "new JPEGSaveOptions()"
"false" -> Não exibirá janela de salvar como, isso significa que a imagem será salva diretamente, se for utilizado "true" aparecerá uma janela pedindo para salvar.
Extension.LOWERCASE -> Deixa a extensão de nosso arquivo em caixa baixa.
Então como isso nosso script já funciona, se você não quiser abrir o dialogo que pede para selecionar as imagens, você pode abrir um dialogo que seleciona uma pasta, e depois recuperar todos os arquivos dentro dele, por exemplo:
var pasta = Folder.selectDialog ("Abri uma pasta");
var arquivos = pasta.getFiles("*.jpg");
for(i=0;i
app.load(arquivos[i]);
Este código pegará todos os arquivos .jpg dentro da pasta selecionada na janela.
Em breve estarei trazendo as funções para salvar outros formatos de arquivos, entre outras coisas.