bestsource

Wordpress 썸네일 생성에 연결하는 방법

bestsource 2023. 3. 5. 10:13
반응형

Wordpress 썸네일 생성에 연결하는 방법

일반적인 Wordpress 기능을 넘어 ImageMagick을 사용하여 Wordpress에서 특정 크기의 섬네일을 커스텀 처리하려고 하는데 어떻게 해야 할지 잘 모르겠습니다.

새로운 섬네일 사이즈를 추가합니다.

add_image_size( 'new-thumb', 100, 100 );

그리고 여기가 내가 어디에 걸어야 할지 모르겠어.썸네일의 최종 복사가 Wordpress에 저장되기 전에 커스텀 처리를 하고 싶습니다.원하는 기본 psuedo 코드는 다음과 같습니다.

The_hook_or_action_that_fires_when_a_thumbnail_is_saved() {

    if (<Thumbnail Being Generated> == 'new-thumb') {
      $thumb_file = 'the thumbnail image we are about to save';
      $thumbfile = 'do some imagemagic stuff here';
    }

    save_thumbnail;
}

이미지 작성은 할 수 있지만, 커스텀 섬네일 처리를 어디에 어떻게 해야 할지 잘 모르겠습니다.

조언해주시면 감사하겠습니다!

@brasofilo가 나를 올바른 방향으로 인도해줘서 고마워...

좀 뒤적거리다가 이걸 알아냈어요.wp_generate_attachment_metadata에 접속하여 이미지를 조작할 수 있습니다.

이 작업의 기본은 이미지 크기를 특정 크기("브랜드" 섬네일)로 조정한 다음 해당 섬네일의 캔버스를 흰색 배경으로 고정된 높이와 너비로 확장하는 것입니다.

비슷한 상황에 처한 사람이 있을 때를 대비해서 코드를 붙여야겠다고 생각했어요.각 이미지 유형에 대한 삭제를 제거하기 위해 정리할 수 있습니다.이 코드의 한 가지 문제는 원래 이미지 크기가 원하는 축소 이미지 크기보다 작을 경우 생성되지 않는다는 것입니다(WordPress 기능).

add_image_size( 'brands', 200, 168 );

add_filter('wp_generate_attachment_metadata','replace_uploaded_image');
function replace_uploaded_image($image_data) {

    // if there is no brands image : return
    if ( !isset($image_data['sizes']['brands']) ) 
        return $image_data;

    //Set our desired static height / width (200px * 168px)
    $staticWidth  = 200;
    $staticHeight = 168;

    // paths to the uploaded image and the large image
    $upload_dir            = wp_upload_dir();
    $brands_image_location = $upload_dir['path'] . '/' . $image_data['sizes']['brands']['file'];

    // set our temp image file
    $brands_image_location_tmp = "$brands_image_location.tmp";

    // get the attributes of the source image
    list($imageWidth, $imageHeight, $imageType, $imageAttr) = getimagesize($brands_image_location);

    // there are different php functions depending on what type of image it is, so check the type
    switch($imageType) {
        //GIF
        case 1: 
            //Create a 200x168 white canvas
            $newimage=imagecreatetruecolor($staticWidth,$staticHeight);
            $white=imagecolorallocate($newimage, 255, 255, 255);
            imagefill($newimage,0,0,$white);

            //Calculate where the image should start so its centered
            if($imageWidth == $staticWidth)  { $x_pos = 0; } else { $x_pos = round( ($staticWidth - $imageWidth) / 2 ); }
            if($imageHeight == $staticHeight) { $y_pos = 0; } else { $y_pos = round( ($staticHeight - $imageHeight) / 2 ); }

            //Copy the source image to the new canvas
            $src = imagecreatefromgif($brands_image_location);
            imagecopy($newimage, $src, $x_pos, $y_pos, 0, 0, $imageWidth, $imageHeight);
            imagegif($newimage,$brands_image_location_tmp);

            // delete the uploaded image
            unlink($brands_image_location);

            // rename the temporary brands image
            rename($brands_image_location_tmp, $brands_image_location);

            // update image metadata and return them
            $image_data['sizes']['brands']['width'] = $staticWidth;
            $image_data['sizes']['brands']['height'] = $staticHeight;

            break;

        //JPG
        case 2:
            //Create a 200x168 white canvas
            $newimage=imagecreatetruecolor($staticWidth,$staticHeight);
            $white=imagecolorallocate($newimage, 255, 255, 255);
            imagefill($newimage,0,0,$white);

            //Calculate where the image should start so its centered
            if($imageWidth == $staticWidth)  { $x_pos = 0; } else { $x_pos = round( ($staticWidth - $imageWidth) / 2 ); }
            if($imageHeight == $staticHeight) { $y_pos = 0; } else { $y_pos = round( ($staticHeight - $imageHeight) / 2 ); }

            //Copy the source image to the new canvas
            $src = imagecreatefromjpeg($brands_image_location);
            imagecopy($newimage, $src, $x_pos, $y_pos, 0, 0, $imageWidth, $imageHeight);
            imagejpeg($newimage,$brands_image_location_tmp);

            // delete the uploaded image
            unlink($brands_image_location);

            // rename the temporary brands image
            rename($brands_image_location_tmp, $brands_image_location);

            // update image metadata and return them
            $image_data['sizes']['brands']['width'] = $staticWidth;
            $image_data['sizes']['brands']['height'] = $staticHeight;

            break;

        //PNG
        case 3:
            //Create a 200x168 white canvas
            $newimage=imagecreatetruecolor($staticWidth,$staticHeight);
            $white=imagecolorallocate($newimage, 255, 255, 255);
            imagefill($newimage,0,0,$white);

            //Calculate where the image should start so its centered
            if($imageWidth == $staticWidth)  { $x_pos = 0; } else { $x_pos = round( ($staticWidth - $imageWidth) / 2 ); }
            if($imageHeight == $staticHeight) { $y_pos = 0; } else { $y_pos = round( ($staticHeight - $imageHeight) / 2 ); }

            //Copy the source image to the new canvas
            $src = imagecreatefrompng($brands_image_location);
            imagecopy($newimage, $src, $x_pos, $y_pos, 0, 0, $imageWidth, $imageHeight);
            imagepng($newimage,$brands_image_location_tmp);

            // delete the uploaded image
            unlink($brands_image_location);

            // rename the temporary brands image
            rename($brands_image_location_tmp, $brands_image_location);

            // update image metadata and return them
            $image_data['sizes']['brands']['width'] = $staticWidth;
            $image_data['sizes']['brands']['height'] = $staticHeight;

            break;

    }

    return $image_data;
}

내 라이브러리에는 다음이 있습니다.

생성된 썸네일의 사용자 지정 이름 설정

엄지손가락 이름과 작물을 아주 재미있게 조작했네요.여기에 링크되어 있는 원래의 Q&A를 확인해 주세요.

용도:

원본 대신 크기 조정된 이미지 자동 사용

용도:

  • wp_generate_attachment_metadata

썸네일에 둥근 모서리를 자동으로 추가하는 방법

용도:

업로드에 최소 이미지 치수가 필요한 방법

용도:

연도, 월, 일별로 업로드 정리

용도:

썸네일 재생성 플러그인으로 동작하도록 변경을 제안합니다.

$upload_dir = wp_upload_dir();
$brands_image_location = $upload_dir['basedir'].'/'.dirname($image_data['file']) . '/' . $image_data['sizes']['brands']['file'];
$brands_image_location = $brands_image_location.'.tmp';

이는 wp_upload_dir가 현재 연도 월의 경로를 반환하지만 이전에 업로드한 이미지의 경로가 다를 수 있기 때문입니다.

언급URL : https://stackoverflow.com/questions/14200815/how-to-hook-into-wordpress-thumbnail-generation

반응형