Embora a resposta de Philip seja o melhor caminho a seguir, é possível fazer o que você deseja inteiramente na esfera do JPEG.
O JPEG funciona dividindo sua imagem em blocos chamados Unidades Mínimas de Codificação (MCUs), normalmente 16 × 16 cada, e compactando-as separadamente. Você pode ver isso nas imagens quando aumenta muito o nível de compressão. Em níveis de compressão mais razoáveis, os blocos se misturam tão suavemente que você nunca vê as bordas.
Podemos aproveitar esse fato para adicionar, sem perdas, uma borda branca simples a uma imagem. Simplesmente precisamos criar uma matriz oca de blocos brancos igual ao tamanho da imagem de saída e soltar os blocos JPEG MCU originais no meio.¹
Existe uma desvantagem nessa técnica: ela só funciona quando os tamanhos de imagem de entrada e saída são múltiplos múltiplos do tamanho da MCU. Quando esse não é o caso, precisamos recomprimir alguns dos blocos na margem entre a borda branca e as bordas da imagem original. Você não verá essa diferença na saída se ficar longe dos níveis de compactação JPEG excessivamente altos, por isso ainda é efetivamente sem perdas.
Não conheço nenhum programa que faça apenas isso. A coisa mais próxima que eu conheço é algo que faz a operação inversa: o jpegtran possui uma função de corte que corta sem perda partes das bordas da imagem.² Faz isso descartando os MCUs cortados ao longo das bordas da imagem, deixando-os em o meio intocado.
A solução pronta mais simples que conheço é o plugin Better JPEG Lossless Resave para Photoshop. Ele usa técnicas baseadas nas idéias dadas acima para copiar os MCUs da imagem original sempre que possível, para evitar recriá-los a partir da versão descompactada, como normalmente faz o Photoshop.³
Digressões:
Você pode pensar que a borda resultante não será totalmente branca , pois a perda de JPEG criará algum tipo de diferença de cor na saída. Fiz alguns testes e, no Photoshop, pelo menos, uma imagem puramente branca salva pelo nível 10 do JPEG da Save For Web (isto é, qualidade "baixa") resulta em uma imagem decodificada que ainda é puramente branca.
Eu determinei isso com dois testes:
Primeiro, carreguei o JPEG como uma camada em cima do original, defina o modo de mesclagem da camada superior como Diferença e, em seguida, adicionei uma camada de ajuste de Níveis acima para tentar aumentar as diferenças. A imagem resultante permaneceu preta, indicando "sem diferença".
Segundo, quando não consegui ver as diferenças esperadas, larguei a camada de ajuste e retornei a camada JPEG ao modo de mesclagem Normal, peguei a ferramenta Conta-gotas e procurei por toda a imagem um pixel que não aparecia como RGB (255.255.255 ) no painel Informações. Eu nunca encontrei um. Eu esperava ver os números piscarem um pouco enquanto esfregava a imagem, mas eles permaneceram firmes.
Só posso concluir que este é um caso degenerado do algoritmo de codificação: blocos brancos puros permanecem brancos através da transformada discreta de cosseno .
Curiosamente, isso não acontece com blocos pretos puros. Pelo menos com a implementação do Photoshop, eles se transformam em RGB (1,1,1) quando decodificados, e não em RGB (0,0,0).
Resumindo, você não precisa se preocupar com pontos pontilhados nessa área de borda ao imprimir uma imagem produzida usando a técnica acima.
jpegtran
é um programa de linha de comando, mas também há um programa GUI do Windows com base no mesmo código chamado jpegcrop
.
Infelizmente, este plugin é apenas para Windows.
jpegtran
a função de recorte também pode ser usada para estender. (Não tenho certeza de que cor das fronteiras estendidas acabam sendo, no entanto.)jpegtran
também pode estender a imagem, mas ela sempre funciona com um cinza médio do código embutido, RGB (128,128,128). Isso é feito simplesmente porque é a única opção fácil, já que no espaço do coeficiente do DCT, você pode fazer isso com umabzero()
chamada simples . Tentei um truque selvagem para mudar isso , o que não funciona, mas deveria lhe dar uma sensação da feiura envolvida. joga as mãos para cima em frustraçãoO ponto a lembrar aqui é que você perde qualidade ao salvar a foto em um formato de compactação com perda. Desde que você salve a foto em um formato sem perdas (PSD, TIFF etc.) após adicionar a borda, você não perderá mais dados do que já perdeu ao salvar a foto como JPEG em primeiro lugar.
fonte
Não é totalmente sem perdas, mas você pode se aproximar bastante usando o GIMP (ou algum outro editor com um recurso semelhante) e os dois truques a seguir:
Primeiro, verifique se a borda que você está adicionando tem um múltiplo de 8 pixels de largura (e de preferência um múltiplo de 16 pixels).
Isso é importante porque o algoritmo de compactação JPEG divide a imagem em blocos de 8 × 8 pixels *, iniciando no canto superior esquerdo, e aplica o algoritmo de compactação com perdas independentemente a cada bloco. Assim, pelo menos em princípio, você pode preencher uma imagem JPEG sem perdas adicionando blocos completos de 8 × 8 pixels em torno dos já existentes. Se, no entanto, você tentasse adicionar uma borda que não tivesse um número inteiro de blocos, os blocos na imagem preenchida não seriam alinhados com os do original, e alguma perda de compactação seria inevitável.
*) Na verdade, a maioria das imagens JPEG usa subamostragem de croma , o que significa que apenas a parte da escala de cinza da imagem é realmente compactada em blocos 8 × 8, enquanto os canais de croma são reduzidos em 50% antes da compactação, tornando seu tamanho efetivo do bloco 16 × 16 pixels. Assim, para obter melhores resultados, a largura da borda deve ser realmente um múltiplo de 16 pixels. No entanto, geralmente você pode se dar bem com uma borda de 8 (ou 24 ou 40 etc.) pixels, pois um pouco de perda de compressão no chroma não é muito perceptível.
A segunda parte do truque é, ao salvar a imagem final, marcar a caixa de seleção "Usar configurações de qualidade da imagem original" na caixa de diálogo Exportar imagem como JPEG (em Configurações avançadas). Faça isso mesmo que pareça resultar em uma qualidade mais baixa do que você normalmente usaria!
Essa configuração faz com que o GIMP reutilize exatamente as mesmas configurações de compactação usadas para a imagem original, o que geralmente elimina cerca de 99% das perdas de compactação, desde que você não tenha editado a imagem muito intensamente e, em particular, que os blocos no a nova imagem ainda está alinhada com as do original. (Ocasionalmente ainda haverá algumas perdas devido a erros de arredondamento, mas muito menos do que seria o contrário).
Como uma demonstração rápida, tirei esta imagem de teste JPEG do Wikimedia Commons , originalmente salva com uma configuração de qualidade bastante baixa de 50 e adicionei uma (e meio) borda preta e branca sofisticada (tipo de) 8px usando o método descrito acima:
Aqui está a diferença entre a imagem original (15,1 kB) e a imagem editada (16,7 kB), mostrada usando o modo de camada "Grain extract" do GIMP:
Você pode ver alguns erros de croma muito leves, causados pelo fato de a largura da borda não ser um múltiplo de 16 e (se você olhar com atenção) alguns blocos onde também houve pequenas perdas no canal luma devido ao arredondamento. Ainda assim, visualmente, a imagem original e a imagem acolchoada são praticamente indistinguíveis, mesmo com ampliação de 2x e alternando entre elas.
Em particular, compare isso com o resultado de aumentar a qualidade JPEG de 50 para 60 antes de salvar a imagem acolchoada, que produz a seguinte imagem de 17,6 kB:
Em alta ampliação, você pode definitivamente ver que a imagem editada é visivelmente mais borrada em alguns lugares do que a original, e a diferença com o extrato de grão confirma isso:
fonte
Desculpe se isso não é exatamente o que você queria, mas ...
Parece que você adiciona uma borda branca como uma ajuda para posicionar sua imagem durante a impressão. Por que não se concentrar em aprender as interfaces de impressão corretamente e evitar hackers desonestos como este? A outra questão levantada é: você está permitindo que o programa de impressão redimensione sua imagem de 4680x3120 para se ajustar à DPI / resolução correta. Isso pode ter um efeito mais grave do que salvar novamente um jpeg.
fonte
As respostas anteriores são muito boas.
Vou apenas adicionar alguns "aspectos psicológicos" do formato jpg.
Se um jpg estiver bem preparado, ele perde apenas cerca de 0,5% de informações. Na maioria dos casos, isso é algo que o olho humano não pode ver. Você precisa de um programa para fazer algumas análises e ver as diferenças (como a análise que Ilmari acabou de fazer).
"Boa qualidade" é um processo, não apenas a maneira como um formato de arquivo salva a imagem. Sim, você recompôs o arquivo com jpg mais uma vez porque realmente precisava dele. Se estiver em uma situação controlada, não há problema em fazer isso.
Você realmente precisava, pois isso implica que você não pode usar outro formato sem perdas, que possui necessidades muito específicas de armazenamento ou software ou um fluxo de trabalho muito restrito.
Se você está realmente preocupado com a qualidade, provavelmente não usaria o Paint. O formato JPG possui algumas configurações que você não pode controlar no Paint.
Aqui está minha lista de programas gratuitos, onde você realmente pode controlar a compactação de jpg e a opção que precisa selecionar. (Todos eles na caixa de diálogo salvar jpg)
Irfanview - Ative Desativar subamostragem de cores croma.
FastStone Image Viewer - Subamostragem de cores: Nenhuma.
Gimp - Subamostragem 4: 4: 4
Conclusão. Não use o Paint.
Uma coisa que eu ainda não verifiquei. Se todos esses programas mantiverem o perfil de cores incorporado. Vou editar minha postagem mais tarde.
fonte
O IrfanView funciona bem para mim em conjuntos de imagens. Aqui estão algumas notas de instruções
Aqui está o meu procedimento armazenado para inserção de borda - Procedimento de infra-estrutura para adicionar uma borda
fonte