sourcecode

업로드된 이미지와 동일한 크기의 미리 보기를 생성하도록 Wordpress를 강제

codebag 2023. 2. 7. 19:51
반응형

업로드된 이미지와 동일한 크기의 미리 보기를 생성하도록 Wordpress를 강제

AFIK, Wordpress는 원하는 이미지 크기가 작을 때만(타깃 크기가 같을 때는 생성되지 않음) 축소판 그림(예: '크기')을 생성합니다.

사용하고 있다

add_image_size( 'referenzen-big', 627, 490, true );

따라서 고객이 627x490px 파일을 업로드하면 원본 이미지가 사용됩니다.

단, 이 커스터마이즈에서는 이미지를 적절한 사이즈로 업로드하고 가능한 한 높은 .jpg-압축으로 업로드하기 때문에 이는 바람직하지 않습니다.따라서 이 경우 영상이 약 300kB가 됩니다.

정확하지만 완벽한 방법은 이미지를 628x490으로 업로드하도록 요청하는 것입니다. 따라서 폭이 1p 더 넓어지면 스케일 조정이 강제됩니다.이러한 제안은 받아들여지지 않습니다:-)

지금까지 이미지 작성을 담당하는 훅을 조사하고 해당 함수를 추적했습니다.마지막으로 발견한 훅은 image_make_intermediate_size()입니다.

이것은 실제 크기를 조정하는 함수입니다.image_timeout_dimensions 심지어 다음과 같은 문구도 있습니다.

// if the resulting image would be the same size or larger we don't want to resize it
if ( $new_w >= $orig_w && $new_h >= $orig_h )
    return false;

그러면 이 "강제 크기 조정" 기능을 활성화하려면 어떻게 해야 합니까?

고객님의 기능에 도입하기 위한 솔루션을 소개합니다.php 파일:

function thumbnail_upscale( $default, $orig_w, $orig_h, $new_w, $new_h, $crop ){
    if ( !$crop ) return null; // let the wordpress default function handle this

    $aspect_ratio = $orig_w / $orig_h;
    $size_ratio = max($new_w / $orig_w, $new_h / $orig_h);

    $crop_w = round($new_w / $size_ratio);
    $crop_h = round($new_h / $size_ratio);

    $s_x = floor( ($orig_w - $crop_w) / 2 );
    $s_y = floor( ($orig_h - $crop_h) / 2 );

    return array( 0, 0, (int) $s_x, (int) $s_y, (int) $new_w, (int) $new_h, (int) $crop_w, (int) $crop_h );
}
add_filter( 'image_resize_dimensions', 'thumbnail_upscale', 10, 6 );

이 정보는 https://wordpress.stackexchange.com/questions/50649/how-to-scale-up-featured-post-thumbnail 에서 확인할 수 있습니다.

이미지를 업그레이드하여 모든 이미지 크기에 대한 미리 보기를 생성합니다.유일한 단점은 아마도 단점은 아닐지도 모르지만 업로드된 모든 이미지에 대해 각 이미지 크기에 대해 별도의 파일을 얻을 수 있다는 것입니다.작은 아이콘이나 뭐 그런 거라도.이게 도움이 됐으면 좋겠다.

아직 최적은 아니지만, Timthumb와 같은 서버사이드 라이브러리를 사용하여 원본 소스를 제공하고 'q'(= 품질) 매개변수를 사용하는 것이 더 낫지 않을까요?

그러면 이미지를 원래 크기로 최적화할 수 있습니다.

몇 가지 경고일 수도 있지만, 정말이지 핵심을 수정하는 것보다는 어떤 것이든 낫습니다.

디스크 용량이 문제가 아니라 다운로드 속도만 문제라면...

제가 직면한 문제는 클라이언트가 기능 이미지 업로드의 크기나 치수에 주의를 기울이지 않았다는 것입니다.테마는 응답성이 뛰어난 테마로, 페이지의 이미지 높이 범위 및 원하는 이미지 폭까지 확대/축소할 수 있습니다.따라서 고속 네트워크에 있는 경우 매우 큰 파일을 업로드하고 크기를 알아차리지 못할 수 있습니다.

커스텀 이미지 크기를 추가하고 플러그인을 사용하여 강제로 재생성하고 테마를 수정하여 커스텀 크기를 표시했습니다.

저도 비슷한 문제가 있었습니다. 고객 웹사이트는 더 큰 영향력을 발휘해야 한다는 것입니다.커스텀 Image Editor를 사용하여 다음과 같은 플러그인을 구축했습니다.

require_once ABSPATH . WPINC . '/class-wp-image-editor.php';
require_once ABSPATH . WPINC . '/class-wp-image-editor-gd.php';

function im_add_image_editor($implementations) {
    array_unshift($implementations, 'IM_Image_Editor_GD');
    return $implementations;
}
add_filter('wp_image_editors', 'im_add_image_editor');

IM_Image_Editor_GD는 WP_Image_Editor_GD를 확장하여 _resize 함수를 변경합니다(호출자).image_resize_dimensions)의 내부 버전을 호출하려면 다음과 같이 하십시오.

class IM_Image_Editor_GD extends WP_Image_Editor_GD {
    public function __destruct() {
        parent::__destruct();
    }

    protected function _resize( $max_w, $max_h, $crop = false ) {
        $dims = $this->image_resize_dimensions( $this->size['width'], $this->size['height'], $max_w, $max_h, $crop );
        if ( ! $dims ) {
            return new WP_Error( 'error_getting_dimensions', __('Could not calculate resized image dimensions'), $this->file );
        }
        list( $dst_x, $dst_y, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h ) = $dims;

        $resized = wp_imagecreatetruecolor( $dst_w, $dst_h );
        imagecopyresampled( $resized, $this->image, $dst_x, $dst_y, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h );

        if ( is_resource( $resized ) ) {
            $this->update_size( $dst_w, $dst_h );
            return $resized;
        }

        return new WP_Error( 'image_resize_error', __('Image resize failed.'), $this->file );
    }

    protected function image_resize_dimensions($orig_w, $orig_h, $dest_w, $dest_h, $crop = false) {
        // Copied original image_resize_dimensions and changed the test
    }
}

이것이 도움이 되길 바라며 내 영어실력에 대해 미안해!

이 플러그인으로 관리할 수 있습니다.https://wordpress.org/plugins/simple-image-sizes/

심플한 이미지 사이즈

이 플러그인을 사용하면 사이트의 사용자 지정 이미지 크기를 만들 수 있습니다.미디어 옵션 페이지에서 직접 테마 크기를 재정의합니다.방금 만든 크기를 모두 재생성하고 재생성하려는 크기를 선택할 수 있습니다.이제 모든 코드를 복사하여 함수 테마 파일에 붙여넣을 수 있습니다.생성된 크기를 직접 투고에 사용하여 적절한 크기로 이미지를 삽입할 수 있습니다! 이제 삽입 후 이미지에 크기를 표시할 것인지 선택할 수 있습니다.이제 'Media' 일반 창에서 이미지를 하나씩 재생성할 수 있습니다.이제 '미디어' 일반 창에서 대량 작업을 통해 이미지를 재생성할 수 있습니다.이제 단일 첨부 파일 편집 페이지에서 영상 크기를 재생성할 수 있습니다.


여기에 이미지 설명 입력

WordPress의 기본 이미지 크기는 "thumbnail", "medium", "Large" 및 "full"(업로드한 이미지의 크기)입니다.이러한 이미지 크기는 WordPress Administration Media 패널의 [Settings]> [ Media ]에서 설정할 수 있습니다.다음과 같이 _post_thumbnail()에서 기본 크기를 사용할 수 있습니다.

the_post_thumbnail();                  // without parameter -> 'post-thumbnail'
the_post_thumbnail('thumbnail');       // Thumbnail (default 150px x 150px max)
the_post_thumbnail('medium');          // Medium resolution (default 300px x 300px max)
the_post_thumbnail('large');           // Large resolution (default 640px x 640px max)
the_post_thumbnail('full');            // Full resolution (original size uploaded)
the_post_thumbnail( array(100,100) );  // Other resolutions

자세한 것은, http://codex.wordpress.org/Function_Reference/the_post_thumbnail 의 메뉴얼도 참조해 주세요.

신경 쓰지 마, 내가 코어를 바꿨어.속은 아프지만 이 프로젝트에서는 그게 최선의 해결책이야

언급URL : https://stackoverflow.com/questions/13460188/force-wordpress-to-create-thumbnails-of-same-size-as-the-uploaded-image

반응형