Como você pode definir a largura máxima para imagens originais?

Caso: eu tenho um cliente que não sabe muito sobre o mundo digital. No entanto, o que ela sabe é como obter a foto da câmera para o computador e no WordPress. No entanto, ela não sabe como reduzir o tamanho da foto para um tamanho normal.

Solução: eu gosto do WordPress para reduzir automaticamente as fotos em segundo plano para uma largura máxima de 1024px.

Problema: Embora eu possa definir a largura máxima nas configurações, posso definir a $ content_width e posso adicionar novos tamanhos de imagem com ‘add_image_size’. A foto original ainda está armazenada na pasta de upload em seu tamanho original. O espaço do disco rígido será facilmente preenchido.

Pergunta: O que devo colocar em functions.php para permitir que o WordPress reduza a imagem original (se for maior que a largura máxima)?

Solutions Collecting From Web of "Como você pode definir a largura máxima para imagens originais?"

Eu consegui resolver isso usando o seguinte código:

function my_handle_upload ( $params ) { $filePath = $params['file']; if ( (!is_wp_error($params)) && file_exists($filePath) && in_array($params['type'], array('image/png','image/gif','image/jpeg'))) { $quality = 90; list($largeWidth, $largeHeight) = array( get_option( 'large_size_w' ), get_option( 'large_size_h' ) ); list($oldWidth, $oldHeight) = getimagesize( $filePath ); list($newWidth, $newHeight) = wp_constrain_dimensions( $oldWidth, $oldHeight, $largeWidth, $largeHeight ); $resizeImageResult = image_resize( $filePath, $newWidth, $newHeight, false, null, null, $quality); unlink( $filePath ); if ( !is_wp_error( $resizeImageResult ) ) { $newFilePath = $resizeImageResult; rename( $newFilePath, $filePath ); } else { $params = wp_handle_upload_error ( $filePath, $resizeImageResult->get_error_message() ); } } return $params; } add_filter( 'wp_handle_upload', 'my_handle_upload' ); 

O arquivo original era 3,3Mb depois que foi carregado, com grandes dimensões configuradas para 2048×2048, levou apenas 375Kb no servidor (cerca de 90% de redução!)

O redimensionamento já está feito para criar os tamanhos grande / médio / polegar, mas o problema em sua face é que a imagem é muito grande para resize, seja por falta de memory ou tempo.

Então, o redimensionamento não é uma opção, se não fosse você não teria seu problema. Em vez disso, tente limitar as imagens, portanto, se ocorrer uma transferência de 20MB, é negada com uma mensagem indicando que ela precisa ser reduzida.

Limitação com base na área de imagem / megapixels:

 < ?php /** * Plugin Name: Deny Giant Image Uploads * Description: Prevents Uploads of images greater than 3.2MP */ function tomjn_deny_giant_images($file){ $type = explode('/',$file['type']); if($type[0] == 'image'){ list( $width, $height, $imagetype, $hwstring, $mime, $rgb_r_cmyk, $bit ) = getimagesize( $file['tmp_name'] ); if($width * $height > 3200728){ // I added 100,000 as sometimes there are more rows/columns than visible pixels depending on the format $file['error'] = 'This image is too large, resize it prior to uploading, ideally below 3.2MP or 2048x1536'; } } return $file; } add_filter('wp_handle_upload_prefilter','tomjn_deny_giant_images'); 

Limitação com base na largura ou altura:

https://wordpress.stackexchange.com/posts/67110/revisões

 < ?php /** Plugin Name: (#67107) »kaiser« Restrict file upload */ function wpse67107_restrict_upload( $file ) { $file_data = getimagesize( $file ); // Handle cases where we can't get any info: if ( ! $file_data ) return $file; list( $width, $height, $type, $hwstring, $mime, $rgb_r_cmyk, $bit ) = $file_data; // Add conditions when to abort if ( $width > 2048 ) $file['error'] = 'Error statement'; return $file; } add_filter( 'wp_handle_upload_prefilter', 'wpse67107_restrict_upload' ); 

A limitação por área permitiria imagens altas / finas ou amplas / curtas que podem ser redimensionadas, a limitação por dimensões pode ser mais fácil de explicar