๋ฃจ์  ์†Œํ”„ํŠธ ๋กœ๊ณ 

216.73.216.129 TODAY : 93

์—…๋ฌด/๊ต์œก

 > 

ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ด€๋ จ

๐Ÿ“š PHP ์ค‘๊ธ‰ - 4์ฃผ์ฐจ: ํŒŒ์ผ ์—…๋กœ๋“œ ๋ฐ ์ด๋ฏธ์ง€ ์ฒ˜๋ฆฌ - 04 ์ด๋ฏธ์ง€ ๋ฆฌ์‚ฌ์ด์ง• ๋ฐ ์ธ๋„ค์ผ ์ƒ์„ฑ (GD ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ)

๐Ÿ“š PHP ์ค‘๊ธ‰ - 4์ฃผ์ฐจ: ํŒŒ์ผ ์—…๋กœ๋“œ ๋ฐ ์ด๋ฏธ์ง€ ์ฒ˜๋ฆฌ - 04 ์ด๋ฏธ์ง€ ๋ฆฌ์‚ฌ์ด์ง• ๋ฐ ์ธ๋„ค์ผ ์ƒ์„ฑ (GD ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ)
ํ‰์  10.0 ๋ผ์ด์„ผ์Šค free
์‚ฌ์šฉ์žํ‰์  10.0 ์šด์˜์ฒด์ œ
๋‹ค์šด๋กœ๋“œ 1 ํŒŒ์ผํฌ๊ธฐ 0
์ œ์ž‘์‚ฌ LUZENSOFT ๋“ฑ๋ก์ผ 2025-07-27 19:47:28
์กฐํšŒ์ˆ˜ 4
- ์„ค๋ช…

๐Ÿ“š PHP ์ค‘๊ธ‰ - 4์ฃผ์ฐจ: ํŒŒ์ผ ์—…๋กœ๋“œ ๋ฐ ์ด๋ฏธ์ง€ ์ฒ˜๋ฆฌ - 04 ์ด๋ฏธ์ง€ ๋ฆฌ์‚ฌ์ด์ง• ๋ฐ ์ธ๋„ค์ผ ์ƒ์„ฑ (GD ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ)





์ด๋ฒˆ #PHP ์ค‘๊ธ‰ 4์ฃผ์ฐจ์—์„œ๋Š” #ํŒŒ์ผ ์—…๋กœ๋“œ๋œ #์ด๋ฏธ์ง€๋ฅผ ๋‹ค๋ฃจ๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ด…๋‹ˆ๋‹ค. ํŠนํžˆ #GD ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ด๋ฏธ์ง€ #๋ฆฌ์‚ฌ์ด์ง• ๋ฐ #์ธ๋„ค์ผ ์ƒ์„ฑํ•˜๋Š” ๊ณผ์ •์— ์ดˆ์ ์„ ๋งž์ถœ ๊ฑฐ์˜ˆ์š”. ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋‹ค์–‘ํ•œ ํฌ๊ธฐ์˜ ์ด๋ฏธ์ง€๋ฅผ ์ œ๊ณตํ•˜๊ฑฐ๋‚˜, ํŽ˜์ด์ง€ ๋กœ๋”ฉ ์†๋„๋ฅผ ์ตœ์ ํ™”ํ•  ๋•Œ ์ด๋ฏธ์ง€ ๋ฆฌ์‚ฌ์ด์ง•์€ ํ•„์ˆ˜์ ์ธ ๊ธฐ์ˆ ์ด์ฃ .







1. GD ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ดํ•ดํ•˜๊ธฐ


uploadImage


#GD ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” PHP์—์„œ ์ด๋ฏธ์ง€๋ฅผ ๋™์ ์œผ๋กœ ์ƒ์„ฑํ•˜๊ณ  ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ์„œ๋ฒ„์— #PHP์™€ ํ•จ๊ป˜ GD ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ์–ด์•ผ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์š”. ๋Œ€๋ถ€๋ถ„์˜ ์›น ํ˜ธ์ŠคํŒ… ํ™˜๊ฒฝ์—๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์„ค์น˜๋˜์–ด ์žˆ์ง€๋งŒ, ํ˜น์‹œ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์„œ๋ฒ„ ๊ด€๋ฆฌ์ž์—๊ฒŒ ๋ฌธ์˜ํ•˜๊ฑฐ๋‚˜ phpinfo() ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด GD ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ™œ์„ฑํ™” ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

GD ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๋‹ค์–‘ํ•œ ์ด๋ฏธ์ง€ ํ˜•์‹์„ ์ง€์›ํ•˜๋Š”๋ฐ์š”, ์ฃผ๋กœ #JPEG, #PNG, #GIF ๋“ฑ์˜ ํ˜•์‹์„ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ํ˜•์‹์— ๋งž๋Š” ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฏธ์ง€๋ฅผ ์ฝ๊ณ  ์“ธ ์ˆ˜ ์žˆ์ฃ .







2. ์ด๋ฏธ์ง€ ๋ฆฌ์‚ฌ์ด์ง• ๊ธฐ๋ณธ ์›๋ฆฌ


uploadImage


#์ด๋ฏธ์ง€ ๋ฆฌ์‚ฌ์ด์ง•์€ ์›๋ณธ ์ด๋ฏธ์ง€์˜ ํฌ๊ธฐ๋ฅผ ๋ณ€๊ฒฝํ•˜์—ฌ ์ƒˆ๋กœ์šด ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ณผ์ •์ž…๋‹ˆ๋‹ค. GD ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ๋Š” ์ฃผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์ณ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.

  1. #์›๋ณธ ์ด๋ฏธ์ง€ ๋กœ๋“œ: imagecreatefromjpeg(), imagecreatefrompng(), imagecreatefromgif() ๋“ฑ ์›๋ณธ ์ด๋ฏธ์ง€ ํ˜•์‹์— ๋งž๋Š” ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฏธ์ง€๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค. ์ด ํ•จ์ˆ˜๋“ค์€ #์ด๋ฏธ์ง€ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

  2. #์ƒˆ๋กœ์šด ์บ”๋ฒ„์Šค ์ƒ์„ฑ: imagecreatetruecolor() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฆฌ์‚ฌ์ด์ง•๋  ์ด๋ฏธ์ง€์˜ ์ƒˆ๋กœ์šด ํญ๊ณผ ๋†’์ด๋ฅผ ๊ฐ€์ง„ ๋นˆ ์บ”๋ฒ„์Šค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด ์บ”๋ฒ„์Šค๋„ ์ด๋ฏธ์ง€ ๋ฆฌ์†Œ์Šค ํ˜•ํƒœ๋กœ ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค.

  3. #์ด๋ฏธ์ง€ ๋ณต์‚ฌ ๋ฐ ๋ฆฌ์ƒ˜ํ”Œ๋ง: imagecopyresampled() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์›๋ณธ ์ด๋ฏธ์ง€ ๋ฆฌ์†Œ์Šค์˜ ํŠน์ • ๋ถ€๋ถ„์„ ์ƒˆ๋กœ์šด ์บ”๋ฒ„์Šค์— ๋ณต์‚ฌํ•˜๋ฉด์„œ ๋™์‹œ์— ํฌ๊ธฐ๋ฅผ ์กฐ์ ˆํ•ฉ๋‹ˆ๋‹ค. ์ด ํ•จ์ˆ˜๋Š” ์ด๋ฏธ์ง€ ํ’ˆ์งˆ์„ ์œ ์ง€ํ•˜๋ฉด์„œ ํฌ๊ธฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฐ ๋งค์šฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

  4. #์ƒˆ๋กœ์šด ์ด๋ฏธ์ง€ ์ €์žฅ: imagejpeg(), imagepng(), imagegif() ๋“ฑ ์›ํ•˜๋Š” ์ถœ๋ ฅ ํ˜•์‹์— ๋งž๋Š” ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ๋กœ ์ƒ์„ฑ๋œ ์ด๋ฏธ์ง€๋ฅผ ํŒŒ์ผ๋กœ ์ €์žฅํ•˜๊ฑฐ๋‚˜ ๋ธŒ๋ผ์šฐ์ €์— ์ง์ ‘ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

  5. #๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ: imagedestroy() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ด ๋๋‚œ ์ด๋ฏธ์ง€ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ํ•ด์ œํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์„œ๋ฒ„ ์ž์›์„ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.







3. ์ด๋ฏธ์ง€ ๋ฆฌ์‚ฌ์ด์ง• ๋ฐ ์ธ๋„ค์ผ ์ƒ์„ฑ ์ฝ”๋“œ ๊ตฌํ˜„


uploadImage


์ด์ œ ์‹ค์ œ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ์ด๋ฏธ์ง€ #๋ฆฌ์‚ฌ์ด์ง•๊ณผ #์ธ๋„ค์ผ ์ƒ์„ฑ ๊ณผ์ •์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” ๊ฐ„๋‹จํ•œ ํŒŒ์ผ ์—…๋กœ๋“œ ํ›„ ์ฆ‰์‹œ #์ธ๋„ค์ผ์„ ์ƒ์„ฑํ•˜๋Š” ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.

PHP

<?php
// ์—…๋กœ๋“œ๋œ ํŒŒ์ผ์ด ์žˆ๋Š”์ง€ ํ™•์ธ
if (isset($_FILES['uploadFile'])) {
    $uploadDir = 'uploads/'; // ์ด๋ฏธ์ง€๊ฐ€ ์ €์žฅ๋  ๋””๋ ‰ํ† ๋ฆฌ
    if (!is_dir($uploadDir)) {
        mkdir($uploadDir, 0777, true); // ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์—†์œผ๋ฉด ์ƒ์„ฑ
    }

    $fileName = $_FILES['uploadFile']['name'];
    $fileTmpName = $_FILES['uploadFile']['tmp_name'];
    $fileSize = $_FILES['uploadFile']['size'];
    $fileError = $_FILES['uploadFile']['error'];
    $fileType = $_FILES['uploadFile']['type'];

    $fileExt = strtolower(pathinfo($fileName, PATHINFO_EXTENSION));
    $allowedExt = ['jpg', 'jpeg', 'png', 'gif'];

    // ํ—ˆ์šฉ๋œ ํ™•์žฅ์ž์ธ์ง€ ํ™•์ธ
    if (in_array($fileExt, $allowedExt)) {
        if ($fileError === 0) {
            if ($fileSize < 5000000) { // 5MB ๋ฏธ๋งŒ
                $fileNewName = uniqid('', true) . '.' . $fileExt;
                $fileDestination = $uploadDir . $fileNewName;

                // ํŒŒ์ผ ์—…๋กœ๋“œ
                if (move_uploaded_file($fileTmpName, $fileDestination)) {
                    echo "ํŒŒ์ผ์ด ์„ฑ๊ณต์ ์œผ๋กœ ์—…๋กœ๋“œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค: " . $fileNewName . "<br>";

                    // --- ์ด๋ฏธ์ง€ ๋ฆฌ์‚ฌ์ด์ง• ๋ฐ ์ธ๋„ค์ผ ์ƒ์„ฑ ์‹œ์ž‘ ---

                    $thumbDir = 'thumbnails/'; // ์ธ๋„ค์ผ์ด ์ €์žฅ๋  ๋””๋ ‰ํ† ๋ฆฌ
                    if (!is_dir($thumbDir)) {
                        mkdir($thumbDir, 0777, true); // ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์—†์œผ๋ฉด ์ƒ์„ฑ
                    }

                    $thumbWidth = 200; // ์ธ๋„ค์ผ ํญ
                    $thumbHeight = 200; // ์ธ๋„ค์ผ ๋†’์ด

                    // ์›๋ณธ ์ด๋ฏธ์ง€ ๋กœ๋“œ
                    $sourceImage = null;
                    if ($fileExt == 'jpg' || $fileExt == 'jpeg') {
                        $sourceImage = imagecreatefromjpeg($fileDestination);
                    } elseif ($fileExt == 'png') {
                        $sourceImage = imagecreatefrompng($fileDestination);
                    } elseif ($fileExt == 'gif') {
                        $sourceImage = imagecreatefromgif($fileDestination);
                    }

                    if ($sourceImage) {
                        $sourceWidth = imagesx($sourceImage);
                        $sourceHeight = imagesy($sourceImage);

                        // ๋น„์œจ ์œ ์ง€ํ•˜๋ฉฐ ์ธ๋„ค์ผ ํฌ๊ธฐ ๊ณ„์‚ฐ
                        $ratio = max($thumbWidth / $sourceWidth, $thumbHeight / $sourceHeight);
                        $newWidth = $sourceWidth * $ratio;
                        $newHeight = $sourceHeight * $ratio;

                        // ์ƒˆ๋กœ์šด ์บ”๋ฒ„์Šค ์ƒ์„ฑ
                        $thumbImage = imagecreatetruecolor($thumbWidth, $thumbHeight);

                        // ํˆฌ๋ช…๋„ ์œ ์ง€ (PNG, GIF์˜ ๊ฒฝ์šฐ)
                        if ($fileExt == 'png' || $fileExt == 'gif') {
                            imagealphablending($thumbImage, false);
                            imagesavealpha($thumbImage, true);
                            $transparent = imagecolorallocatealpha($thumbImage, 255, 255, 255, 127);
                            imagefilledrectangle($thumbImage, 0, 0, $thumbWidth, $thumbHeight, $transparent);
                        }

                        // ์ด๋ฏธ์ง€ ๋ณต์‚ฌ ๋ฐ ๋ฆฌ์ƒ˜ํ”Œ๋ง (๋น„์œจ์— ๋งž์ถฐ ์ค‘์•™ ํฌ๋กญ ๋˜๋Š” ์—ฌ๋ฐฑ ์ถ”๊ฐ€)
                        // ์—ฌ๊ธฐ์„œ๋Š” ๊ฐ„๋‹จํ•˜๊ฒŒ ๋น„์œจ์— ๋งž์ถฐ ์ค„์ด๊ณ , ์ธ๋„ค์ผ ํฌ๊ธฐ์— ๋งž์ถฐ ์ค‘์•™์„ ์ž˜๋ผ๋‚ด๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„
                        $sourceX = ($newWidth - $thumbWidth) / 2 / $ratio;
                        $sourceY = ($newHeight - $thumbHeight) / 2 / $ratio;

                        imagecopyresampled(
                            $thumbImage,       // ๋ชฉ์  ์ด๋ฏธ์ง€ (์ƒˆ๋กœ์šด ์บ”๋ฒ„์Šค)
                            $sourceImage,      // ์›๋ณธ ์ด๋ฏธ์ง€
                            0,                 // ๋ชฉ์  X ์ขŒํ‘œ
                            0,                 // ๋ชฉ์  Y ์ขŒํ‘œ
                            $sourceX,          // ์›๋ณธ X ์ขŒํ‘œ
                            $sourceY,          // ์›๋ณธ Y ์ขŒํ‘œ (ํฌ๋กญ์„ ์œ„ํ•œ ๊ณ„์‚ฐ)
                            $thumbWidth,       // ๋ชฉ์  ํญ
                            $thumbHeight,      // ๋ชฉ์  ๋†’์ด
                            $sourceWidth,      // ์›๋ณธ ํญ
                            $sourceHeight      // ์›๋ณธ ๋†’์ด
                        );

                        // ์ธ๋„ค์ผ ์ €์žฅ
                        $thumbFileName = 'thumb_' . $fileNewName;
                        $thumbDestination = $thumbDir . $thumbFileName;

                        if ($fileExt == 'jpg' || $fileExt == 'jpeg') {
                            imagejpeg($thumbImage, $thumbDestination, 90); // 90์€ ํ’ˆ์งˆ (0-100)
                        } elseif ($fileExt == 'png') {
                            imagepng($thumbImage, $thumbDestination, 9); // 9๋Š” ์••์ถ• ๋ ˆ๋ฒจ (0-9)
                        } elseif ($fileExt == 'gif') {
                            imagegif($thumbImage, $thumbDestination);
                        }

                        echo "์ธ๋„ค์ผ์ด ์„ฑ๊ณต์ ์œผ๋กœ ์ƒ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค: " . $thumbFileName . "<br>";

                        // ๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ
                        imagedestroy($sourceImage);
                        imagedestroy($thumbImage);

                    } else {
                        echo "์ง€์›ํ•˜์ง€ ์•Š๋Š” ์ด๋ฏธ์ง€ ํ˜•์‹์ž…๋‹ˆ๋‹ค.<br>";
                    }

                    // --- ์ด๋ฏธ์ง€ ๋ฆฌ์‚ฌ์ด์ง• ๋ฐ ์ธ๋„ค์ผ ์ƒ์„ฑ ๋ ---

                } else {
                    echo "ํŒŒ์ผ ์—…๋กœ๋“œ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.<br>";
                }
            } else {
                echo "ํŒŒ์ผ ํฌ๊ธฐ๊ฐ€ ๋„ˆ๋ฌด ํฝ๋‹ˆ๋‹ค (5MB ์ œํ•œ).<br>";
            }
        } else {
            echo "ํŒŒ์ผ ์—…๋กœ๋“œ ์ค‘ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค: " . $fileError . "<br>";
        }
    } else {
        echo "ํ—ˆ์šฉ๋˜์ง€ ์•Š๋Š” ํŒŒ์ผ ํ™•์žฅ์ž์ž…๋‹ˆ๋‹ค.<br>";
    }
} else {
    echo "ํŒŒ์ผ์„ ์—…๋กœ๋“œํ•ด์ฃผ์„ธ์š”.<br>";
}
?>

<form action="" method="post" enctype="multipart/form-data">
    <input type="file" name="uploadFile">
    <button type="submit">์—…๋กœ๋“œ</button>
</form>







4. ์ฝ”๋“œ ์„ค๋ช… ๋ฐ ์ถ”๊ฐ€ ๊ณ ๋ ค์‚ฌํ•ญ

uploadImage



์œ„ ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์ณ ์ด๋ฏธ์ง€ ๋ฆฌ์‚ฌ์ด์ง• ๋ฐ ์ธ๋„ค์ผ ์ƒ์„ฑ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  • #ํŒŒ์ผ ์—…๋กœ๋“œ ์ฒ˜๋ฆฌ: $_FILES ์ „์—ญ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—…๋กœ๋“œ๋œ ํŒŒ์ผ์˜ ์ •๋ณด๋ฅผ ์–ป๊ณ , ์ง€์ •๋œ ๋””๋ ‰ํ† ๋ฆฌ๋กœ ํŒŒ์ผ์„ ์ด๋™์‹œํ‚ต๋‹ˆ๋‹ค.

  • #์ด๋ฏธ์ง€ ํ˜•์‹ ๊ฐ์ง€: pathinfo()์™€ in_array()๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—…๋กœ๋“œ๋œ ํŒŒ์ผ์˜ ํ™•์žฅ์ž๋ฅผ ํ™•์ธํ•˜๊ณ , GD ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์ง€์›ํ•˜๋Š” ์ด๋ฏธ์ง€ ํ˜•์‹์ธ์ง€ ํŒ๋ณ„ํ•ฉ๋‹ˆ๋‹ค.

  • #์›๋ณธ ์ด๋ฏธ์ง€ ๋กœ๋“œ: imagecreatefromjpeg(), imagecreatefrompng(), imagecreatefromgif() ์ค‘ ์ ์ ˆํ•œ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์›๋ณธ ์ด๋ฏธ์ง€๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.

  • #์ธ๋„ค์ผ ํฌ๊ธฐ ๋ฐ ๋น„์œจ ๊ณ„์‚ฐ: imagesx()์™€ imagesy()๋กœ ์›๋ณธ ์ด๋ฏธ์ง€์˜ ํญ๊ณผ ๋†’์ด๋ฅผ ๊ฐ€์ ธ์˜จ ํ›„, ์›ํ•˜๋Š” ์ธ๋„ค์ผ ํฌ๊ธฐ(thumbWidth, thumbHeight)์— ๋งž๊ฒŒ #๋น„์œจ์„ ์œ ์ง€ํ•˜๋ฉฐ ์ƒˆ๋กœ์šด ํญ๊ณผ ๋†’์ด๋ฅผ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” ์ธ๋„ค์ผ ์˜์—ญ์„ ์ฑ„์šฐ๋ฉด์„œ ์›๋ณธ ๋น„์œจ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด #์ค‘์•™ ํฌ๋กญ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋„๋ก imagecopyresampled์˜ ์›๋ณธ X/Y ์ขŒํ‘œ๋ฅผ ์กฐ์ ˆํ–ˆ์Šต๋‹ˆ๋‹ค.

  • #์ƒˆ๋กœ์šด ์ด๋ฏธ์ง€ ์บ”๋ฒ„์Šค ์ƒ์„ฑ: imagecreatetruecolor() ํ•จ์ˆ˜๋กœ ์ธ๋„ค์ผ ํฌ๊ธฐ์˜ ๋นˆ ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

  • #ํˆฌ๋ช…๋„ ์œ ์ง€: PNG๋‚˜ GIF์™€ ๊ฐ™์ด ํˆฌ๋ช…๋„๋ฅผ ์ง€์›ํ•˜๋Š” ์ด๋ฏธ์ง€์˜ ๊ฒฝ์šฐ, imagealphablending(false)์™€ imagesavealpha(true)๋ฅผ ์„ค์ •ํ•˜์—ฌ ํˆฌ๋ช… ๋ฐฐ๊ฒฝ์ด ์†์ƒ๋˜์ง€ ์•Š๋„๋ก ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

  • #์ด๋ฏธ์ง€ ๋ณต์‚ฌ ๋ฐ ๋ฆฌ์ƒ˜ํ”Œ๋ง: imagecopyresampled() ํ•จ์ˆ˜๊ฐ€ ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค. ์ด ํ•จ์ˆ˜๋Š” ์›๋ณธ ์ด๋ฏธ์ง€์˜ ํ”ฝ์…€์„ ์ƒˆ๋กœ์šด ์บ”๋ฒ„์Šค์— ๋ณต์‚ฌํ•˜๋ฉด์„œ ๋™์‹œ์— ํฌ๊ธฐ๋ฅผ ์กฐ์ ˆํ•˜๊ณ , ํ”ฝ์…€ ๋ณด๊ฐ„(interpolation)์„ ํ†ตํ•ด ์ด๋ฏธ์ง€ ํ’ˆ์งˆ์„ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.

  • #์ธ๋„ค์ผ ์ €์žฅ: imagejpeg(), imagepng(), imagegif() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ธ๋„ค์ผ์„ thumbnails/ ๋””๋ ‰ํ† ๋ฆฌ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. JPEG์˜ ๊ฒฝ์šฐ ํ’ˆ์งˆ์„, PNG์˜ ๊ฒฝ์šฐ ์••์ถ•๋ฅ ์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • #๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ: imagedestroy()๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ๋œ ์ด๋ฏธ์ง€ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ฐ˜๋“œ์‹œ ํ•ด์ œํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋ฅผ ๋ฐฉ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.



์ถ”๊ฐ€ ๊ณ ๋ ค์‚ฌํ•ญ:

uploadImage

  • #๋ณด์•ˆ: ํŒŒ์ผ ์—…๋กœ๋“œ ์‹œ์—๋Š” ๋ฐ˜๋“œ์‹œ ํŒŒ์ผ ํ™•์žฅ์ž, MIME ํƒ€์ž… ๊ฒ€์‚ฌ, ํŒŒ์ผ ํฌ๊ธฐ ์ œํ•œ ๋“ฑ #๋ณด์•ˆ ๊ฒ€์ฆ์„ ์ฒ ์ €ํžˆ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์•…์„ฑ ํŒŒ์ผ ์—…๋กœ๋“œ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•จ์ž…๋‹ˆ๋‹ค.

  • #์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ: ํŒŒ์ผ ์—…๋กœ๋“œ ๋ฐ ์ด๋ฏธ์ง€ ์ฒ˜๋ฆฌ ๊ณผ์ •์—์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค์–‘ํ•œ #์˜ค๋ฅ˜์— ๋Œ€ํ•œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ๊ฐ•ํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • #๋Œ€์šฉ๋Ÿ‰ ์ด๋ฏธ์ง€ ์ฒ˜๋ฆฌ: ๋งค์šฐ ํฐ ์ด๋ฏธ์ง€๋ฅผ ์ฒ˜๋ฆฌํ•  ๋•Œ๋Š” ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ ๋ฌธ์ œ๋ฅผ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ•„์š”์— ๋”ฐ๋ผ PHP์˜ memory_limit ์„ค์ •์„ ์กฐ์ •ํ•˜๊ฑฐ๋‚˜, ๋” ํšจ์œจ์ ์ธ ์ด๋ฏธ์ง€ ์ฒ˜๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(์˜ˆ: ImageMagick)๋ฅผ ๊ฒ€ํ† ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • #๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ: ๋Œ€๋Ÿ‰์˜ ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ ๋ฐ ๋ฆฌ์‚ฌ์ด์ง•์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ, ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์œ„ํ•ด ์ด๋ฏธ์ง€ ์ฒ˜๋ฆฌ๋ฅผ #๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์•ˆ์„ ๊ณ ๋ คํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฒˆ ์ฃผ์ฐจ์—์„œ๋Š” #GD ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ™œ์šฉํ•œ ์ด๋ฏธ์ง€ #๋ฆฌ์‚ฌ์ด์ง• ๋ฐ #์ธ๋„ค์ผ ์ƒ์„ฑ์˜ ๊ธฐ์ดˆ๋ฅผ ๋‹ค๋ค„๋ดค์Šต๋‹ˆ๋‹ค. ์ด ๊ธฐ์ˆ ์€ ์‹ค์ œ ์›น ์„œ๋น„์Šค์—์„œ ์ด๋ฏธ์ง€ ์ฒ˜๋ฆฌ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ ํ•ต์‹ฌ์ ์ธ ์—ญํ• ์„ ํ•  ๊ฑฐ์˜ˆ์š”.