원본 이미지의 최대 너비를 어떻게 설정할 수 있습니까?


11

사례 : 디지털 세계에 대해 잘 모르는 클라이언트가 있습니다. 그러나 그녀가 아는 것은 카메라에서 사진을 컴퓨터와 WordPress에 가져 오는 방법입니다. 그러나 그녀는 사진의 크기를 보통 크기로 줄이는 방법을 모릅니다.

해결 방법 : WordPress를 사용하여 백그라운드에있는 사진의 최대 너비를 최대 1024px로 자동으로 줄입니다.

문제 : 설정에서 최대 너비를 설정할 수 있지만 $ content_width를 설정하고 'add_image_size'를 사용하여 새 이미지 크기를 추가 할 수 있습니다. 원본 사진은 여전히 ​​원본 크기로 업로드 폴더에 저장됩니다. 하드 디스크 공간이 가득 찼다는 의미입니다.

질문 : WordPress에서 원본 이미지의 크기를 줄이려면 functions.php에 무엇을 넣어야합니까 (최대 너비보다 큰 경우)?

답변:


6

다음 코드를 사용하여 해결할 수있었습니다.

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' );

원본 파일은 업로드 된 후 3,3Mb로, 크기가 2048x2048로 설정되어 서버에서 375Kb 만 소요되었습니다 (약 90 % 감소).


1
내 답변의 다른 코드와 함께 블로그 게시물에서이를 사용해 주시겠습니까?
Tom J Nowell

유용하다고 생각 되더라도 상관 없습니다. 블로그는 무엇입니까?
Mark

내 사이트의 tomjn.com, 아직 글을 쓰지 않았습니다. 다음 주에 이렇게하고 URL이 완성되면 여기에 URL을 게시하겠습니다
Tom J Nowell

3

큰 / 중간 / 엄지 크기를 만들기 위해 크기 조정이 이미 완료되었지만 메모리 나 시간 부족으로 인해 이미지 크기가 너무 커서 크기가 너무 커지는 문제가 있습니다.

따라서 크기 조정은 문제가되지 않은 경우 옵션이 아닙니다. 대신 이미지를 제한하여 20MB 업로드가 발생하면 크기를 줄여야한다는 메시지와 함께 거부됩니다.

이미지 영역 / 메가 픽셀을 기준으로 제한 :

<?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');

너비 또는 높이를 기준으로 제한 :

/wordpress//posts/67110/revisions

<?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' );

영역을 제한하면 크기를 조정할 수있는 키가 크거나 얇거나 넓거나 짧은 이미지가 허용되며 크기를 제한하면 설명하기가 더 쉬울 수 있습니다


글쎄, 내가 원하는 것과 내가 원하는 것은 원본 이미지가 '큰'이미지 크기로 설정된 치수와 동일한 크기를 갖게된다는 것을 열심히 생각했습니다. 그렇게하려면 'wp_handle_upload'로 확인해야한다고 생각합니다.
Mark

아 당신은 큰 / 중간 크기를 가지고, 당신은 단지 원본이 사용되는 것을 막고 싶어? 나는 당신이 그녀가 방대한 이미지를 업로드하고 있고 방대한 버전이 항상 사용 중이며 더 작은 버전을 생성하지 않았다고 생각 했습니까?
Tom J Nowell

1
그러나 그 후크는 올바른 장소 또는 wp_handle_upload_prefilter위에 나열된 필터에 사용 된 필터 에 대해 들립니다 . 오류를 추가하지 않고 일부 PHP 크기 조정 코드는 원본 파일에 다시 쓰는 한 트릭을 수행 할 수 있습니다. 그래도 테스트가 필요합니다
Tom J Nowell

당신이 올바른지. 모든 적절한 크기가 생성되고 있습니다. 설정 페이지에서 크기를 설정했을 때 WordPress가 원본을 유지하는 이유를 이해하지 못합니다. 또는 옵트 아웃 할 수있는 "Keep Original"을 사용하여 체크인 옵션을 만들 수도 있습니다. 내 2 센트 만 ...
Mark

1
파일을 다른 크기로 사용하기 위해 파일을 저장해야하기 때문에 수정이 이루어 지거나 재생성되는 경우 필요합니다
Tom J Nowell
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.