Pdf den fotoğraf ayıklama HTML(e-okul formatı)

  • Konbuyu başlatan Konbuyu başlatan erbay1
  • Başlangıç tarihi Başlangıç tarihi
Kodla Büyü

erbay1

Üye
Mesajlar
43
E-okuldan indirdiğiniz excel dosyalarında bazı öğrenci fotoları renksiz görününebilir. Alternatif yöntem Pdf olarak indireceğiniz Fotoğraflı-Kimlik Bilgili Öğrenci Listesindeki fotoğrafları renkli olarak ayıklamak için Html kodu yazdım.
ayikla.webp

Kod:
<!DOCTYPE html>
<html lang="tr">
<head>
    <meta charset="UTF-8">
    <title>PDF Resim Ayıklayıcı</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/pdf.js/3.4.120/pdf.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.10.1/jszip.min.js"></script>
    <style>
        body { font-family: 'Segoe UI', Tahoma, sans-serif; background: #f4f7f6; display: flex; justify-content: center; align-items: center; min-height: 100vh; margin: 0; }
        .card { background: white; padding: 2.5rem; border-radius: 20px; box-shadow: 0 15px 35px rgba(0,0,0,0.1); width: 100%; max-width: 550px; text-align: center; }
        #drop-area {
            border: 3px dashed #3498db;
            border-radius: 15px;
            padding: 50px 20px;
            cursor: pointer;
            transition: 0.3s;
            background: #f0f7ff;
            margin: 20px 0;
        }
        #drop-area.highlight {
            background: #e1f0ff;
            border-color: #2e86de;
            transform: scale(1.02);
        }
        #status { font-weight: bold; color: #2980b9; margin-top: 10px; }
        .info { font-size: 0.9rem; color: #666; }
    </style>
</head>
<body>
    <div class="card">
        <h2>PDF Resim Ayıklayıcı</h2>
        <p class="info">Resimleri (image1.jpeg,image2.jpeg vb.formatta) ayıklar ZIP olarak indirir.</p>
     
        <div id="drop-area">
            <strong>PDF'i Buraya Bırakın veya Seçmek İçin Tıklayın</strong>
        </div>
     
        <input type="file" id="file-input" accept="application/pdf" style="display:none">
        <div id="status">Hazırım Diyor</div>
    </div>

    <script>
        const pdfjsLib = window['pdfjs-dist/build/pdf'];
        pdfjsLib.GlobalWorkerOptions.workerSrc = 'https://cdnjs.cloudflare.com/ajax/libs/pdf.js/3.4.120/pdf.worker.min.js';

        const dropArea = document.getElementById('drop-area');
        const fileInput = document.getElementById('file-input');
        const status = document.getElementById('status');

    
        dropArea.onclick = () => fileInput.click();
        fileInput.onchange = (e) => handleFile(e.target.files[0]);
        ['dragenter', 'dragover', 'dragleave', 'drop'].forEach(eventName => {
            dropArea.addEventListener(eventName, (e) => {
                e.preventDefault();
                e.stopPropagation();
            }, false);
        });
        ['dragenter', 'dragover'].forEach(eventName => {
            dropArea.addEventListener(eventName, () => dropArea.classList.add('highlight'), false);
        });

        ['dragleave', 'drop'].forEach(eventName => {
            dropArea.addEventListener(eventName, () => dropArea.classList.remove('highlight'), false);
        });

   
        dropArea.addEventListener('drop', (e) => {
            const dt = e.dataTransfer;
            const file = dt.files[0];
            if (file && file.type === "application/pdf") {
                handleFile(file);
            } else {
                status.innerText = "Hata: Lütfen geçerli bir PDF bırakın.";
            }
        });

        async function handleFile(file) {
            if (!file) return;
            status.innerText = "İşleniyor...";
            const zip = new JSZip();
         
            try {
                const arrayBuffer = await file.arrayBuffer();
                const pdf = await pdfjsLib.getDocument({data: arrayBuffer}).promise;
                let imageIndex = 0;

                for (let i = 1; i <= pdf.numPages; i++) {
                    const page = await pdf.getPage(i);
                    const ops = await page.getOperatorList();
                    status.innerText = `Sayfa ${i}/${pdf.numPages} taranıyor...`;

                    for (let j = 0; j < ops.fnArray.length; j++) {
                        if (ops.fnArray[j] === pdfjsLib.OPS.paintImageXObject ||
                            ops.fnArray[j] === pdfjsLib.OPS.paintInlineImageXObject) {
                         
                            const name = ops.argsArray[j][0];
                            try {
                                const img = await page.objs.get(name);
                                if (!img) continue;

                           
                                if (img.width > img.height) continue;

                                const canvas = document.createElement('canvas');
                                canvas.width = img.width;
                                canvas.height = img.height;
                                const ctx = canvas.getContext('2d');

                                ctx.fillStyle = "#FFFFFF";
                                ctx.fillRect(0, 0, canvas.width, canvas.height);

                                const imageData = ctx.createImageData(img.width, img.height);
                                if (img.data.length === img.width * img.height * 3) {
                                    for (let k = 0, l = 0; k < img.data.length; k += 3, l += 4) {
                                        imageData.data[l] = img.data[k];
                                        imageData.data[l+1] = img.data[k+1];
                                        imageData.data[l+2] = img.data[k+2];
                                        imageData.data[l+3] = 255;
                                    }
                                } else {
                                    imageData.data.set(img.data);
                                }
                             
                                const tempCanvas = document.createElement('canvas');
                                tempCanvas.width = img.width;
                                tempCanvas.height = img.height;
                                tempCanvas.getContext('2d').putImageData(imageData, 0, 0);
                                ctx.drawImage(tempCanvas, 0, 0);

                            
                                const finalCanvas = document.createElement('canvas');
                                const border = 6;
                                finalCanvas.width = Math.max(1, img.width - (border * 2));
                                finalCanvas.height = Math.max(1, img.height - (border * 2));
                             
                                finalCanvas.getContext('2d').drawImage(
                                    canvas,
                                    border, border, finalCanvas.width, finalCanvas.height,
                                    0, 0, finalCanvas.width, finalCanvas.height
                                );

                                imageIndex++;
                                const imgData = finalCanvas.toDataURL("image/jpeg", 0.90).split(',')[1];
                                zip.file(`image${imageIndex}.jpeg`, imgData, {base64: true});

                            } catch (e) { console.warn("Resim hatası:", e); }
                        }
                    }
                }

                if (imageIndex > 0) {
                    status.innerText = "ZIP hazırlanıyor...";
                    const content = await zip.generateAsync({type:"blob"});
                    const link = document.createElement('a');
                    link.href = URL.createObjectURL(content);
                    link.download = "media.zip";
                    link.click();
                    status.innerText = `Başarılı! ${imageIndex} resim media.zip olarak indirildi.`;
                } else {
                    status.innerText = "Uygun resim bulunamadı.";
                }
            } catch (err) {
                console.error(err);
                status.innerText = "Hata oluştu. PDF dosyası bozuk veya şifreli olabilir.";
            }
        }
    </script>
</body>
</html>
 
Son düzenleme:
ilksms
Geri
Üst