Tamanho / miniatura da imagem personalizada - Corte para proporção, mesmo quando a imagem de origem for menor que as dimensões definidas

11

Normalmente, quando você define um tamanho de imagem personalizado usando o recorte rígido - por exemplo add_image_size( 'custom-size', 400, 400, true );-, obtém os seguintes resultados:

  • # 1 Imagem carregada: 600x500> Miniatura: 400x400.
  • # 2 Imagem carregada: 500x300> Miniatura: 400x300.
  • # 3 Imagem carregada: 300x200> Miniatura: 300x200.

No entanto, o que eu gostaria de fazer é quando a imagem carregada for menor que a largura ou altura definida ou ambas do tamanho da imagem personalizada, por exemplo, exemplos 2 e 3 acima - em vez de a imagem ser cortada apenas para caber dentro dessas dimensões - também é cortada para corresponder à proporção (que neste caso é 1: 1), da seguinte forma:

  • # 1 Imagem carregada: 600x500> Miniatura: 400x400.
  • # 2 Imagem carregada: 500x300> Miniatura: 300x300 .
  • # 3 Imagem carregada: 300x200> Miniatura: 200x200 .

Não acredito que isso seja possível usando as opções add_image_size padrão, mas é possível usar uma função diferente ou um gancho que modifique a função add_image_size?

Ou existe um plug-in que adiciona essa funcionalidade?

Qualquer informação que alguém possa fornecer seria muito apreciada.

Joey Joe Joe Shabadoo Júnior
fonte
Para esclarecer melhor minha pergunta. Eu gostaria de poder configurar add_image_sizepara fazer o que descrevi acima. Tenho certeza de que isso não é possível usando os parâmetros padrão, mas espero que seja possível usando um gancho, ação ou filtro.
Joey Joe Joe Junior Shabadoo 15/09/16

Respostas:

2

Você está certo que simplesmente não funciona assim.

Se não for bom pensar em sua pergunta ao contrário, você pode obter o resultado certo nos navegadores modernos usando uma seleção de tamanhos de imagem e imagens responsivas.

Se você usar código como este:

add_image_size( 'custom-size-small', 200, 200, true );
add_image_size( 'custom-size-medium', 300, 300, true );
add_image_size( 'custom-size-large', 400, 400, true );

... e nos seus modelos algo como:

wp_get_attachment_image( $image_ID, 'custom-size-small' )

... então, por padrão (WP 4.4 e posterior), você obterá uma tag de imagem com a versão menor do seu conjunto, com os srctamanhos maiores e no srcsetatributo, dos quais os navegadores mais novos escolherão e exibirão a maior versão apropriada.

Então, se uma imagem em particular não tem uma versão maior, isso não importa. Uma imagem criada 300x200terá uma 200x200versão criada, essa será a única no HTML e todos os navegadores a exibirão.

Eu trabalhei nisso ajustando imagens responsivas para obter um bom desempenho em navegadores que suportam apenas srce não srcset.

Andy Macaulay-Brook
fonte
Obrigado pela resposta. Essa é uma solução interessante, mas infelizmente não acho que funcionaria para a minha situação. As imagens seriam carregadas pelo usuário final - e podem ter qualquer tamanho. Esta solução, a menos que eu esteja entendendo mal, só funciona se as imagens enviadas tiverem um conjunto fixo de tamanhos. Por exemplo, o código acima funcionaria para uma imagem 500x200, mas não para uma imagem 500x199.
Joey Joe Joe Junior Shabadoo
2

Essa não é uma solução muito boa, pois é uma solução CSS mais recente e funciona apenas em 78,9% dos navegadores dos usuários , mas existem alguns polyfills que podem superar essas imagens e imagens de ajuste de objeto.

img {
    display: block;
    overflow: hidden;
    width: 400px;
    height: 400px;
    -o-object-fit: cover;
       object-fit: cover;
}

Idealmente, seria melhor se as imagens menores fossem dimensionadas proporcionalmente no upload, mas não consegui descobrir uma solução para isso.

Bryan Willis
fonte
Obrigado pela resposta. Eu nem estava ciente dessa propriedade, mas sim, como você disse, a falta de suporte ao navegador torna isso impossível. Talvez daqui a alguns anos, talvez.
Joey Joe Joe Shabadoo
Na verdade, comecei a usar o polyfill "objeto-ajuste-imagens" e, embora pareça funcionar Joey, ainda não testei no IE, pois só tenho Mac. Aqui está em ação, se você quiser dar uma olhada . Ele está sendo usado nas miniaturas da grade nessa página. Eu sei que tem que haver um plugin lá fora, que resolve esse problema. No entanto, até agora o YoImages é um bom complemento para o ajuste do objeto, pois permite alterar a posição de corte para qualquer posição de cada imagem.
21716 Bryan Willis