v2.5.2
Giriş yap

PHP veya JS ile resim yüklerken orantılı küçültme

ilkertuncer
578 defa görüntülendi ve 2 kişi tarafından değerlendirildi

Ben php de veritabanına görsel yollarken o resmi orantılı küçültmek ve küçülttüğüm resmi hem veri tabanına hemde bir klasöre kaydetmek istiyorum. Nasıl yapabilirim?

ebykdrms
934 gün önce

Söylediğiniz şekilde yapabilirsiniz. Üzerinden 2 gün geçtiği için önceki cevabımı güncelleyemiyorum. try-catch içinde bir hata alıyorsunuz ama şu an ne olduğunu bilemiyoruz. Hatayı görmek için try-catch bloğunu kaldırabilirsiniz.

Görseli PHP ile boyutlandırmak için örnek
<form action="upload.php" method="post" enctype="multipart/form-data">
    <input type="file" name="my_file">
    <button type="submit">Yükle</button>
</form>

Butona basıldığında seçilen görsel upload.php sayfasına "my_file" key'iyle gönderilecek.

upload.php sayfasında yakalayıp kaydedin.
WideImage: wideimage.sourceforge.net

// Bu sayfayı json sonuç dönecek bir sayfa gibi düşünerek, 
// kolay sonuç döndürmek için birkaç fonksiyon yazıyorum.
function sendJson($type, $message='') {
    header('Content-Type: application/json; charset=utf-8');
    echo json_encode(["type"=>$type, "message"=>$message]);
    exit();
}
function sendError($message='') { sendJson("error", $message); }
function sendSuccess($message='') { sendJson("success", $message); }

// İşlemler buradan sonra başlıyor...

if(!isset($_FILES['my_file'])) sendError("Dosya bulunamadı.");

$fileName = $_FILES['my_file']['name'];
$fileSize = $_FILES['my_file']['size'];
$fileTmpName  = $_FILES['my_file']['tmp_name'];
$fileType = $_FILES['my_file']['type'];

$fileExtension = explode('.',$fileName);
$fileExtension = end($fileExtension);
$fileExtension = strtolower($fileExtension);

if (!in_array($fileExtension,['jpeg','jpg','png'])) sendError('Dosya uzantısı geçersiz. Lütfen jpg veya png dosya seçin');

if ($fileSize > 4 * 1024 * 1024) sendError('Dosya boyutu 4 mb üzerinde olamaz.');

$bigImagePath = 'images/'.$fileName; // Bu php dosyasının olduğu aynı yerde images klasörü de olmalı.
$smallImagePath = 'images/small/'.$fileName; // Bu php dosyasının olduğu aynı yerdeki images klasörü altında small klasörü de olmalı.
$uploaded = move_uploaded_file($fileTmpName, $bigImagePath);
if(!$uploaded) sendError('Dosya kaydedilemedi.');

include "libraries/WideImage.php"; // Bu php dosyasının olduğu aynı yerde libraries klasörü de olmalı. İçine de WideImage.php dosyası eklenmiş olmalı.

$bigImage = WideImage::load($bigImagePath);
$smallImage = WideImage::load($bigImagePath);

$bigImage = WideImage::load($bigImagePath);
$smallImage = WideImage::load($bigImagePath);

$bigImageResized = $bigImage->resize(1000, 1000, 'inside'); // Görseli 1000x1000 piksellik alana sığacak şekilde boyutlandırır.
$smallImageResized = $smallImage->resize(300, 300, 'inside'); // Görseli 300x300 piksellik alana sığacak şekilde boyutlandırır.

try {
    $bigImageResized->saveToFile($bigImagePath);
    $smallImageResized->saveToFile($smallImagePath);
}
catch (Exception $e) { sendError("Görsel boyutlandırma başarısız oldu."); }

$db = null;
try { $db = new PDO("mysql:host=localhost;dbname=test;charset=utf8", "root", "123456"); } 
catch ( PDOException $e ){ sendError("Veritabanına bağlanılamadı."); }

$query = $db->prepare("INSERT INTO gorseller SET dosya_adi = :fileName");
$insert = $query->execute(["fileName"=>$fileName]);
if(!$insert) sendError("Görsel adı veritabanına yazılamadı.");

sendSuccess("Görsel başarıyla kaydedildi.");