카테고리 없음

curl로 이미지 긁어와서 file에 넣어주기

킹콩맨 2024. 5. 22. 11:02
반응형

<?php
function get($url, $params = array()) {
    $url = $url . '?' . http_build_query($params, '', '&');
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36');
    $response = curl_exec($ch);
    curl_close($ch);
    return $response;
}

$url = "https://i.namu.wiki/i/l0x04r27DjSQmS-WgYk6I5x6IkKMyvZjRMyK5dI3EMoMikzCd2Kfl2SMRdvL3-y4zpxI_qLP-fs3QToSR7AU3g.webp";
$imageData = get($url);
$base64Image = base64_encode($imageData);

// JavaScript에서 사용하기 위해 base64 데이터를 JavaScript 변수에 저장
echo "<script>
    var base64Image = 'data:image/jpeg;base64,$base64Image';
</script>";
?>

<!DOCTYPE html>
<html>
<head>
    <title>Image Upload</title>
</head>
<body>
    <input type="file" name='file' id="fileInput">

    <script>
        // base64 데이터를 Blob 객체로 변환
        function base64ToBlob(base64, contentType) {
            const byteCharacters = atob(base64.split(',')[1]);
            const byteNumbers = new Array(byteCharacters.length);
            for (let i = 0; i < byteCharacters.length; i++) {
                byteNumbers[i] = byteCharacters.charCodeAt(i);
            }
            const byteArray = new Uint8Array(byteNumbers);
            return new Blob([byteArray], {type: contentType});
        }

        const base64String = base64Image;
        const contentType = 'image/jpeg'; // 이미지의 실제 컨텐츠 타입을 지정
        const blob = base64ToBlob(base64String, contentType);
        const file = new File([blob], 'image.jpg', {type: contentType});

        // DataTransfer 객체를 사용하여 input file에 파일 추가
        const dataTransfer = new DataTransfer();
        dataTransfer.items.add(file);
        document.getElementById('fileInput').files = dataTransfer.files;
    </script>
</body>
</html>

반응형