• 28-12-2023, 03:18:48
    #1
    Üyeliği durduruldu
    merhabalar.

    php file upload kullanıyorum.
    .gif .png .jpeg gibi resimler yüklüyorum.
    yüklenen resimlerden önce file upload resimi kontrol edip webp çevirip boyutunu kücültecek.
    bunu ücretiyle yapabilcek var mi?

    önemli olan tek tıkla halledilmeli file uploaddan resimi seçip yükle dedikten sonra yukardaki işlemler gerçekleşmeli
  • 28-12-2023, 03:22:34
    #2
    fatbotter.com
    Edit: kendi kodunuzu gösterirseniz daha spesifik bir çözüm sunabilirim.



    function handleImageUpload($uploadedFile) {
    $allowedExtensions = ['gif', 'png', 'jpeg'];
    $uploadPath = '/your/upload/directory/';

    $originalFileName = $uploadedFile['name'];
    $extension = pathinfo($originalFileName, PATHINFO_EXTENSION);

    // WebP kontrolü
    if ($extension === 'webp') {
    // Eğer webp ise ek bir işlem yapma
    return;
    }

    // Desteklenen dosya uzantılarını kontrol et
    if (!in_array(strtolower($extension), $allowedExtensions)) {
    echo 'Geçersiz dosya uzantısı. Lütfen gif, png veya jpeg dosyası yükleyin.';
    return;
    }

    // Yüklenen dosyayı geçici bir klasöre taşı
    $tempFilePath = $_FILES['file']['tmp_name'];
    $tempFileName = uniqid('uploaded_', true) . '.' . $extension;
    $tempDestination = $uploadPath . $tempFileName;

    // Dosyayı webp'ye çevir ve boyutunu küçült
    // Bu kısmı kendi ihtiyaçlarınıza göre özelleştirmeniz gerekebilir
    $convertedFilePath = convertAndResizeToWebP($tempFilePath, $tempDestination);

    // Eğer dönüştürme başarılıysa orijinal dosyayı sil
    if ($convertedFilePath) {
    unlink($tempFilePath);
    }
    }

    function convertAndResizeToWebP($sourceFilePath, $destinationFilePath) {
    // Dönüştürme ve boyut küçültme işlemlerini burada gerçekleştirin
    // Örnek olarak, GD veya Imagick kullanabilirsiniz

    // İşlem başarılıysa dönüştürülmüş dosyanın yolu, hata olursa false döndürün
    // Örneğin:
    // if (conversionAndResizeSuccessful) {
    // return $destinationFilePath;
    // } else
    {
    // return false;
    // }
    }
  • 28-12-2023, 03:27:40
    #3
    Üyeliği durduruldu
    lookout adlı üyeden alıntı: mesajı görüntüle
    Edit: kendi kodunuzu gösterirseniz daha spesifik bir çözüm sunabilirim.



    function handleImageUpload($uploadedFile) {
    $allowedExtensions = ['gif', 'png', 'jpeg'];
    $uploadPath = '/your/upload/directory/';

    $originalFileName = $uploadedFile['name'];
    $extension = pathinfo($originalFileName, PATHINFO_EXTENSION);

    // WebP kontrolü
    if ($extension === 'webp') {
    // Eğer webp ise ek bir işlem yapma
    return;
    }

    // Desteklenen dosya uzantılarını kontrol et
    if (!in_array(strtolower($extension), $allowedExtensions)) {
    echo 'Geçersiz dosya uzantısı. Lütfen gif, png veya jpeg dosyası yükleyin.';
    return;
    }

    // Yüklenen dosyayı geçici bir klasöre taşı
    $tempFilePath = $_FILES['file']['tmp_name'];
    $tempFileName = uniqid('uploaded_', true) . '.' . $extension;
    $tempDestination = $uploadPath . $tempFileName;

    // Dosyayı webp'ye çevir ve boyutunu küçült
    // Bu kısmı kendi ihtiyaçlarınıza göre özelleştirmeniz gerekebilir
    $convertedFilePath = convertAndResizeToWebP($tempFilePath, $tempDestination);

    // Eğer dönüştürme başarılıysa orijinal dosyayı sil
    if ($convertedFilePath) {
    unlink($tempFilePath);
    }
    }

    function convertAndResizeToWebP($sourceFilePath, $destinationFilePath) {
    // Dönüştürme ve boyut küçültme işlemlerini burada gerçekleştirin
    // Örnek olarak, GD veya Imagick kullanabilirsiniz

    // İşlem başarılıysa dönüştürülmüş dosyanın yolu, hata olursa false döndürün
    // Örneğin:
    // if (conversionAndResizeSuccessful) {
    // return $destinationFilePath;
    // } else
    {
    // return false;
    // }
    }
    çok teşekkür ederim hocam benim kodum bu şekilde

    if ($_FILES['ayar_reklam1']['size'] > 3145728) {
        echo "Bu dosya boyutu çok büyük";
        $_SESSION['reklam'] = "no";
        Header("Location: ../reklam-ayar.php");
        exit;
    }
    
    $izinli_uzantilar = array('jpg', 'gif', 'png', 'ico', 'webp');
    
    $uploads_dir = '../../dimg';
    $tmp_name = $_FILES['ayar_reklam1']['tmp_name'];
    $name = $_FILES['ayar_reklam1']['name'];
    
    // Dosya uzantısını doğrula
    $ext = strtolower(pathinfo($name, PATHINFO_EXTENSION));
    if (!in_array($ext, $izinli_uzantilar) && !empty($name)) {
        echo "Bu uzantı kabul edilmiyor";
        $_SESSION['reklam'] = "no";
        Header("Location: ../reklam-ayar.php");
        exit;
    }
    
    // Dosya içeriğini kontrol et
    if (!empty($tmp_name)) {
        $finfo = finfo_open(FILEINFO_MIME_TYPE);
        $mime_type = finfo_file($finfo, $tmp_name);
        if (!$mime_type || !in_array($mime_type, array('image/jpeg', 'image/gif', 'image/png', 'image/x-icon', 'image/webp'))) {
            echo "Geçersiz dosya türü";
            $_SESSION['reklam'] = "no";
            Header("Location: ../reklam-ayar.php");
            exit;
        }
        finfo_close($finfo);
    }
    
    // Güvenli dosya adı oluştur
    $benzersizsayi4 = rand(20000, 32000);
    $refimgyol = substr($uploads_dir, 6) . "/" . $benzersizsayi4 . $name;
    $bos = "0";
    $target_path = "$uploads_dir/$benzersizsayi4$name";
    
    // Dosyayı yükle
    if (!empty($tmp_name)) {
        if (!move_uploaded_file($tmp_name, $target_path)) {
            echo "Dosya yükleme hatası";
            $_SESSION['reklam'] = "no";
            Header("Location: ../reklam-ayar.php");
            exit;
        }
    }
    
    if (empty($name)) {
        $_SESSION['reklam'] = "ok";
        Header("Location: ../reklam-ayar.php");
    } else {
        $resimsilunlink = $db->query("SELECT ayar_reklam1 FROM ayar WHERE ayar_id=0")->fetch(PDO::FETCH_ASSOC);
        if ($resimsilunlink['ayar_reklam1'] && !empty($tmp_name)) {
            // Silme işlemi gerçekleştirme
            unlink("../../" . $resimsilunlink['ayar_reklam1']);
        }
    
        $duzenle = $db->prepare("UPDATE ayar SET ayar_reklam1=:reklam WHERE ayar_id=0");
        $duzenle->bindParam(':reklam', $refimgyol);
        $update = $duzenle->execute();
    
        if ($update) {
            $_SESSION['reklam'] = "ok";
            Header("Location: ../reklam-ayar.php");
        } else {
            $_SESSION['reklam'] = "no";
            Header("Location: ../reklam-ayar.php");
        }
    }
  • 28-12-2023, 03:29:03
    #4
    Direkt olarak bu hazır paketi kullanabilirsiniz composer aracılığı ile https://github.com/rosell-dk/webp-convert en sağlıklısı bu şekilde kullanmak olacaktır.
  • 28-12-2023, 03:52:03
    #5
    sunucunun php ayarlarından imagick i aktif edip aşağıdaki kod bloğunu kullanarak yapabilirsiniz.
    <?php
    if ($_FILES['ayar_reklam1']['size'] > 3145728) {
        echo "Bu dosya boyutu çok büyük";
        $_SESSION['reklam'] = "no";
        Header("Location: ../reklam-ayar.php");
        exit;
    }
    
    $izinli_uzantilar = array('jpg', 'gif', 'png', 'ico', 'webp');
    
    $uploads_dir = '../../dimg';
    $tmp_name = $_FILES['ayar_reklam1']['tmp_name'];
    $name = $_FILES['ayar_reklam1']['name'];
    
    // Dosya uzantısını doğrula
    $ext = strtolower(pathinfo($name, PATHINFO_EXTENSION));
    if (!in_array($ext, $izinli_uzantilar) && !empty($name)) {
        echo "Bu uzantı kabul edilmiyor";
        $_SESSION['reklam'] = "no";
        Header("Location: ../reklam-ayar.php");
        exit;
    }
    
    // Dosya içeriğini kontrol et
    if (!empty($tmp_name)) {
        $finfo = finfo_open(FILEINFO_MIME_TYPE);
        $mime_type = finfo_file($finfo, $tmp_name);
        if (!$mime_type || !in_array($mime_type, array('image/jpeg', 'image/gif', 'image/png', 'image/x-icon', 'image/webp'))) {
            echo "Geçersiz dosya türü";
            $_SESSION['reklam'] = "no";
            Header("Location: ../reklam-ayar.php");
            exit;
        }
        finfo_close($finfo);
    }
    
    // Güvenli dosya adı oluştur
    $benzersizsayi4 = rand(20000, 32000);
    $refimgyol = substr($uploads_dir, 6) . "/" . $benzersizsayi4 . $name;
    $bos = "0";
    $target_path = "$uploads_dir/$benzersizsayi4$name";
    
    // Dosyayı yükle
    if (!empty($tmp_name)) {
        if (!move_uploaded_file($tmp_name, $target_path)) {
            echo "Dosya yükleme hatası";
            $_SESSION['reklam'] = "no";
            Header("Location: ../reklam-ayar.php");
            exit;
        }
    }
    
    // Resmi WebP'ye dönüştür
    if (extension_loaded('imagick')) {
        $imagick = new \Imagick($target_path);
        $imagick->setImageFormat('webp');
        $webpPath = "$uploads_dir/$benzersizsayi4" . pathinfo($name, PATHINFO_FILENAME) . ".webp";
        $imagick->writeImage($webpPath);
        $imagick->clear();
        $imagick->destroy();
    
        // WebP formatında dosya yolu güncelle
        $refimgyol = substr($uploads_dir, 6) . "/" . $benzersizsayi4 . pathinfo($name, PATHINFO_FILENAME) . ".webp";
    
        // Orjinal dosyayı sil
        unlink($target_path);
    }
    
    // Diğer işlemler devam eder...
    if (empty($name)) {
        $_SESSION['reklam'] = "ok";
        Header("Location: ../reklam-ayar.php");
    } else {
        $resimsilunlink = $db->query("SELECT ayar_reklam1 FROM ayar WHERE ayar_id=0")->fetch(PDO::FETCH_ASSOC);
        if ($resimsilunlink['ayar_reklam1'] && !empty($tmp_name)) {
            // Silme işlemi gerçekleştirme
            unlink("../../" . $resimsilunlink['ayar_reklam1']);
        }
     
        $duzenle = $db->prepare("UPDATE ayar SET ayar_reklam1=:reklam WHERE ayar_id=0");
        $duzenle->bindParam(':reklam', $refimgyol);
        $update = $duzenle->execute();
     
        if ($update) {
            $_SESSION['reklam'] = "ok";
            Header("Location: ../reklam-ayar.php");
        } else {
            $_SESSION['reklam'] = "no";
            Header("Location: ../reklam-ayar.php");
        }
    }
    ?>
  • 28-12-2023, 03:55:32
    #6
    Bunlara gerek yok. Direk php upload class ile bunu yapabilirsin. Hem daha kolay hem de bir çok method mevcut. Otomatik webpye çevirebilirsin.
    https://github.com/verot/class.upload.php
  • 28-12-2023, 03:56:04
    #7
    Üyeliği durduruldu
    arsgunners86 adlı üyeden alıntı: mesajı görüntüle
    sunucunun php ayarlarından imagick i aktif edip aşağıdaki kod bloğunu kullanarak yapabilirsiniz.
    <?php
    if ($_FILES['ayar_reklam1']['size'] > 3145728) {
        echo "Bu dosya boyutu çok büyük";
        $_SESSION['reklam'] = "no";
        Header("Location: ../reklam-ayar.php");
        exit;
    }
    
    $izinli_uzantilar = array('jpg', 'gif', 'png', 'ico', 'webp');
    
    $uploads_dir = '../../dimg';
    $tmp_name = $_FILES['ayar_reklam1']['tmp_name'];
    $name = $_FILES['ayar_reklam1']['name'];
    
    // Dosya uzantısını doğrula
    $ext = strtolower(pathinfo($name, PATHINFO_EXTENSION));
    if (!in_array($ext, $izinli_uzantilar) && !empty($name)) {
        echo "Bu uzantı kabul edilmiyor";
        $_SESSION['reklam'] = "no";
        Header("Location: ../reklam-ayar.php");
        exit;
    }
    
    // Dosya içeriğini kontrol et
    if (!empty($tmp_name)) {
        $finfo = finfo_open(FILEINFO_MIME_TYPE);
        $mime_type = finfo_file($finfo, $tmp_name);
        if (!$mime_type || !in_array($mime_type, array('image/jpeg', 'image/gif', 'image/png', 'image/x-icon', 'image/webp'))) {
            echo "Geçersiz dosya türü";
            $_SESSION['reklam'] = "no";
            Header("Location: ../reklam-ayar.php");
            exit;
        }
        finfo_close($finfo);
    }
    
    // Güvenli dosya adı oluştur
    $benzersizsayi4 = rand(20000, 32000);
    $refimgyol = substr($uploads_dir, 6) . "/" . $benzersizsayi4 . $name;
    $bos = "0";
    $target_path = "$uploads_dir/$benzersizsayi4$name";
    
    // Dosyayı yükle
    if (!empty($tmp_name)) {
        if (!move_uploaded_file($tmp_name, $target_path)) {
            echo "Dosya yükleme hatası";
            $_SESSION['reklam'] = "no";
            Header("Location: ../reklam-ayar.php");
            exit;
        }
    }
    
    // Resmi WebP'ye dönüştür
    if (extension_loaded('imagick')) {
        $imagick = new \Imagick($target_path);
        $imagick->setImageFormat('webp');
        $webpPath = "$uploads_dir/$benzersizsayi4" . pathinfo($name, PATHINFO_FILENAME) . ".webp";
        $imagick->writeImage($webpPath);
        $imagick->clear();
        $imagick->destroy();
    
        // WebP formatında dosya yolu güncelle
        $refimgyol = substr($uploads_dir, 6) . "/" . $benzersizsayi4 . pathinfo($name, PATHINFO_FILENAME) . ".webp";
    
        // Orjinal dosyayı sil
        unlink($target_path);
    }
    
    // Diğer işlemler devam eder...
    if (empty($name)) {
        $_SESSION['reklam'] = "ok";
        Header("Location: ../reklam-ayar.php");
    } else {
        $resimsilunlink = $db->query("SELECT ayar_reklam1 FROM ayar WHERE ayar_id=0")->fetch(PDO::FETCH_ASSOC);
        if ($resimsilunlink['ayar_reklam1'] && !empty($tmp_name)) {
            // Silme işlemi gerçekleştirme
            unlink("../../" . $resimsilunlink['ayar_reklam1']);
        }
     
        $duzenle = $db->prepare("UPDATE ayar SET ayar_reklam1=:reklam WHERE ayar_id=0");
        $duzenle->bindParam(':reklam', $refimgyol);
        $update = $duzenle->execute();
     
        if ($update) {
            $_SESSION['reklam'] = "ok";
            Header("Location: ../reklam-ayar.php");
        } else {
            $_SESSION['reklam'] = "no";
            Header("Location: ../reklam-ayar.php");
        }
    }
    ?>
    hocam çok teşekkür ederim çalıştı.
    birkaç sorum olucak müsadenizle
    resim gözükmeyecek hale geldi
    bunu biraz optime edebilir miyiz acaba
  • 28-12-2023, 04:00:03
    #8
    @yusuftepe; bu şekilde deneyebilirsin
    // Resmi WebP'ye dönüştür
    if (extension_loaded('imagick')) {
        $imagick = new \Imagick($target_path);
    
        // Webp için sıkıştırma kalitesini ayarla
        $imagick->setImageCompressionQuality(80); // Kaliteyi burada ayarlayabilirsiniz
    
        $imagick->setImageFormat('webp');
        $webpPath = "$uploads_dir/$benzersizsayi4" . pathinfo($name, PATHINFO_FILENAME) . ".webp";
        $imagick->writeImage($webpPath);
        $imagick->clear();
        $imagick->destroy();
    
        // WebP formatında dosya yolu güncelle
        $refimgyol = substr($uploads_dir, 6) . "/" . $benzersizsayi4 . pathinfo($name, PATHINFO_FILENAME) . ".webp";
    
        // Orjinal dosyayı sil
        unlink($target_path);
    }
  • 28-12-2023, 04:03:38
    #9
    Regnos.com
    yusuftepe adlı üyeden alıntı: mesajı görüntüle
    hocam çok teşekkür ederim çalıştı.
    birkaç sorum olucak müsadenizle
    resim gözükmeyecek hale geldi
    bunu biraz optime edebilir miyiz acaba
    $imagick->setImageCompression(Imagick::COMPRESSION_WEBP);
    $imagick->setImageCompressionQuality(90);

    bunu ekleyin kaliteyi yükseltir.