테스트 사이트 - 개발 중인 베타 버전입니다

썸네일 만드는 함수(원격이미지포함, 리사이즈, 크롭, 워터마크)

· 13년 전 · 2903 · 30
이전에 강좌로 하던 함수를 모닝님의 요청으로 조금 수정햇습니다.

원격이미지의 썸네일 만드는 기능도 포함하였습니다.

해당 라이브러리를 필요한 곳에 인클루드 하시고.

create_thumbnail('http://apmusers.com/tt/attach/1/1267047665.jpg', 'a.png', 50); 나

create_thumbnail('./attach/1/1267047665.jpg', 'a.png', 50); 등로 사용하면 됩니다.

자세한 옵션이나 설명은 라이브러리 파일내에 포함되어있습니다.

댓글 작성

댓글을 작성하시려면 로그인이 필요합니다.

로그인하기

댓글 30개

https 이미지를 읽어올려면
php에 openssl 익스텐션이 필요합니다.
만약 연동 되어잇다면
별다른 처리없이 https 이미지도 읽어올수 있습니다.
13년 전
많이 배웠습니다. ㅎㅎ
감사합니다.
$crop_pos_width = 2;//너비 기준 크롭시 중앙을 기준
$crop_pos_height = 1;//높이 기준 크롭시 상단을 기준

이거 너무 좋습니다.
고맙습니다.
감사합니다 창화님^^
저도 작은 팁 하나 드립니다.

창화님의 썸네일 함수에 언샵마스크를 적용하는 팁하나 올립니다.

언샵마스크의 효과는 아래 링크에서 보실 수 있습니다.

샘플 페이지 : http://carisma.co.kr/v2/sub/thumb.php
언샵마스크는 썸네일 생성시에 이미지가 뭉개지면서 흐릿해지는데
이걸 깔끔하게 샤픈이미지로 만들어 줍니다.
위 샘플링크에서 볼 수 있듯이 400 픽셀의 이미지에선 잘 차이가 나지 않지만
200픽셀이미지에서는 차이가 나기 사작하며 100 픽셀에서는 확연한 차이가 납니다.

창화님의 썸네일 함수에 아래의 내용을 추가하면 됩니다.

1. 905번 째줄 function create_thumbnail(.....){ 의 위쪽에 아래의 내용을 추가해 주세요.

function UnsharpMask_100_1_2($img, $amount, $radius, $threshold)
{
// $img is an image that is already created within php using
// imgcreatetruecolor. No url! $img must be a truecolor image.

// Attempt to calibrate the parameters to Photoshop:
if ($amount > 500) $amount = 500;
$amount = $amount * 0.016;
if ($radius > 50) $radius = 50;
$radius = $radius * 2;
if ($threshold > 255) $threshold = 255;

$radius = abs(round($radius)); // Only integers make sense.
if ($radius == 0) { return $img; imagedestroy($img); break; }
$w = imagesx($img); $h = imagesy($img);
$imgCanvas = $img;
$imgCanvas2 = $img;
$imgBlur = imagecreatetruecolor($w, $h);

// Gaussian blur matrix:
// 1 2 1
// 2 4 2
// 1 2 1

// Move copies of the image around one pixel at the time and merge them with weight
// according to the matrix. The same matrix is simply repeated for higher radii.
for ($i = 0; $i < $radius; $i++)
{
imagecopy ($imgBlur, $imgCanvas, 0, 0, 1, 1, $w - 1, $h - 1); // up left
imagecopymerge ($imgBlur, $imgCanvas, 1, 1, 0, 0, $w, $h, 50); // down right
imagecopymerge ($imgBlur, $imgCanvas, 0, 1, 1, 0, $w - 1, $h, 33.33333); // down left
imagecopymerge ($imgBlur, $imgCanvas, 1, 0, 0, 1, $w, $h - 1, 25); // up right
imagecopymerge ($imgBlur, $imgCanvas, 0, 0, 1, 0, $w - 1, $h, 33.33333); // left
imagecopymerge ($imgBlur, $imgCanvas, 1, 0, 0, 0, $w, $h, 25); // right
imagecopymerge ($imgBlur, $imgCanvas, 0, 0, 0, 1, $w, $h - 1, 20 ); // up
imagecopymerge ($imgBlur, $imgCanvas, 0, 1, 0, 0, $w, $h, 16.666667); // down
imagecopymerge ($imgBlur, $imgCanvas, 0, 0, 0, 0, $w, $h, 50); // center
}
$imgCanvas = $imgBlur;

// Calculate the difference between the blurred pixels and the original
// and set the pixels
for ($x = 0; $x < $w; $x++)
{ // each row
for ($y = 0; $y < $h; $y++)
{ // each pixel
$rgbOrig = ImageColorAt($imgCanvas2, $x, $y);
$rOrig = (($rgbOrig >> 16) & 0xFF);
$gOrig = (($rgbOrig >> 8) & 0xFF);
$bOrig = ($rgbOrig & 0xFF);
$rgbBlur = ImageColorAt($imgCanvas, $x, $y);
$rBlur = (($rgbBlur >> 16) & 0xFF);
$gBlur = (($rgbBlur >> 8) & 0xFF);
$bBlur = ($rgbBlur & 0xFF);

// When the masked pixels differ less from the original
// than the threshold specifies, they are set to their original value.
$rNew = (abs($rOrig - $rBlur) >= $threshold) ? max(0, min(255, ($amount * ($rOrig - $rBlur)) + $rOrig)) : $rOrig;
$gNew = (abs($gOrig - $gBlur) >= $threshold) ? max(0, min(255, ($amount * ($gOrig - $gBlur)) + $gOrig)) : $gOrig;
$bNew = (abs($bOrig - $bBlur) >= $threshold) ? max(0, min(255, ($amount * ($bOrig - $bBlur)) + $bOrig)) : $bOrig;

if (($rOrig != $rNew) || ($gOrig != $gNew) || ($bOrig != $bNew))
{
$pixCol = ImageColorAllocate($img, $rNew, $gNew, $bNew);
ImageSetPixel($img, $x, $y, $pixCol);
}
}
}
return $img;
}

2. 918번째 줄 $watermark_padding = 10;//원본과 워터마크 사이의 여백 : 10px 밑으로 아래 내용추가

$filter[arg1] = 100;
$filter[arg2] = 1;
$filter[arg3] = 2;

3. 978번째줄 $result_save = save_image_from_resource (...); 바로 위에 아래 한줄 추가

UnsharpMask_100_1_2($dst, $filter[arg1], $filter[arg2], $filter[arg3]);

위처럼 적용하시면 창화님의 썸네일 함수에서 언샵 마스크를 적용하여 사용할 수 있습니다.

ps.쓸모없다고 말하진 말아주세요 ^^;;
네에 멋지네요.

포함해서 다시 올리도록 하겠습니다.
팬입니다~!
감사합니다.
이번주 내로 제 싸이트도 싹 유창화썸네일로 바꿔볼려고 합니다. 3년간 다른 썸네일 썼는데..

게시글 목록

번호 제목
384
12508
383
381
20395
12507
12506
12505
12504
12503
12502
12500
12499
12498
20392
12497
12496
12495
12494
12493
12492
12491
12490
12489
12488