الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مساعدة صغيرة بعمل مصغرات للصور المرفوعه

مغلقمُجاب
بدأه fatmaali في 11 مارس 2013 · 12 رد · 878 مشاهدة · في منتدى تطوير المواقع بـ PHP
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم اخواني الافاضل كان عندي مشكلة فى رفع صورة مع الخبر ولكن الاخوان حلوها لي بفضل الله ثم هم الان اطلب منك المساعدة فى نفس الكود ولكن بطريقة اخرى

 

 

الكود يرفع الصور بشكل طبيعي جدا وبدون اى مشاكل لكنه يرفع الصور بنفس حجمها سواء كانت كبيرة او صغيرة وهذا يوثر بالطبع على طريقة عرض الاخبار فالصفحة تجحمل ببطئ

 

لان الصورة ترفع بنفس حجمها لذا اريد ان يتم تعديل هذا الكود بما يتناسب مع انى استيطع ان احدد به حجم الصورة المرفوعه او تصغير الصورة المرفوعه او اي طريقة افضل لذلك

 

 

 

 

الكود

 

 

<?
include("include/config.php");
					$picat=time();
					$upload_dir = "pic/";
					$upload_url = $url_dir."pic/";
					$temp_name = $_FILES['pic']['tmp_name'];
					$file_name = $_FILES['pic']['name']; 
					$file_name = str_replace("\\","",$file_name);
					$file_name = str_replace("'","",$file_name);
					$ext=strstr($file_name,'.');
					$picu="file_".$picat.$ext;
					$file_path = $upload_dir.$picu;
					$ext = str_replace(".","",$ext);
					if($ext=='jpg' || $ext=='JPG' || $ext=='gif' || $ext=='GIF' || $ext=='png' || $ext=='PNG' || $ext=='bmp' || $ext=='BMP')					{
					move_uploaded_file($temp_name, $file_path);
					$picu=$picu;
					$fsize=filesize("$file_path");
					}
$insert="insert into news (titel,picat,note) values ('$titel','$picu','$note')";
$Result=mysql_query($insert);
if($Result)
{
echo"تم الاضافة بنجاح";
}
?>
#2

وعليكم السلام ورحمة الله وبركاته

يمكن تضغير أو تكبير الصور باستخدام مكتبة GD المُضمنة افتراضيا ًمع php ونستخدم لهذا الغرض إما دالة imagecopyresized او دالة imagecopyresampled حيث تعملان نفس العمل تقريبا ً (مع بعض الإختلافات التقنية) , مثلا ً بفرض وجود صورة باسم image.jpg ونريد جعل حجمها 320 x 240 فنستخدم الدالة التالية :

<?php
function resize($image, $new_name, $width, $height)
{
	$tmp_image = imagecreatetruecolor($width, $height);
	imagecopyresampled($tmp_image, $image, 0, 0, 0, 0, $width, $height, imagesx($image), imagesy($image));
	imagejpeg($tmp_image, $new_name, 80);
}
resize(imagecreatefromjpeg('image.jpg'), 'new_image.jpg', 320, 240);
?>

 

لكن مثلا ً عندما يكون لدينا صورة بقياس 1600 x 768 ونريد اعادة تحجيمها لتُصبح على سبيل المثال 320 x 240 فإن الصورة سوف تخضع لعميلة تشوه , ويمكن استخدام نسبة مئوية كوسيط للدالة السابقة بدلا ً من تحديد الابعاد :

<?php
function resize($image, $new_name, $percent)
{
	$tmp_image = imagecreatetruecolor(imagesx($image) * $percent / 100, imagesy($image) * $percent / 100);
	imagecopyresampled($tmp_image, $image, 0, 0, 0, 0, imagesx($image) * $percent / 100, imagesy($image) * $percent / 100, imagesx($image), imagesy($image));
	imagejpeg($tmp_image, $new_name, 80);
}
resize(imagecreatefromjpeg('image.jpg'), 'new_image.jpg', 50);
?>

و المشكلة في الطريقة السابقة هي ان الصور الناتجة يمكن ان تختلف ابعادها بإختلاف ابعاد الصور الاصلية , أما لو جعلنا كلا البعدين (الطول و العرض) يصغر بنفس النسبة نحصل على صور متساوية في الحجم تقريبا و غير مشوهة :

<?php
function resize($image, $new_name, $width, $height)
{
	$radio = imagesx($image) > imagesy($image) ?  imagesx($image) / $width :  imagesy($image) / $height ;
	if(imagesx($image) > imagesy($image))
	{
		$height = imagesy($image) / $radio;
	}
	elseif(imagesy($image) > imagesx($image))
	{
		$width = imagesx($image) / $radio;
	}
	$tmp_image = imagecreatetruecolor($width, $height);
	imagefill($tmp_image, 0, 0, 0xfffff);
	imagecopyresampled($tmp_image, $image, 0, 0, 0, 0, $width, $height, $width * $radio, $height * $radio);
	
	imagejpeg($tmp_image, $new_name, 80);
}
resize(imagecreatefromjpeg('image.jpg'), 'new_image.jpg', 320, 240);

?>

ويمكنكي تعديل الكود السابق لجعل جميع الصور بنفس القياس (لكن مع وجود مساحة بيضاء حول الصورة)

#3

أولا اخي الفاضل اشكرك جدا على تجاوبك السريع والرد

 

 

 

عندي سؤال صغير اتمنى ان لا ازعجك به بالنسبة للطريقة الثالثه

 

 

<?php
function resize($image, $new_name, $width, $height)
{
	$radio = imagesx($image) > imagesy($image) ?  imagesx($image) / $width :  imagesy($image) / $height ;
	if(imagesx($image) > imagesy($image))
	{
		$height = imagesy($image) / $radio;
	}
	elseif(imagesy($image) > imagesx($image))
	{
		$width = imagesx($image) / $radio;
	}
	$tmp_image = imagecreatetruecolor($width, $height);
	imagefill($tmp_image, 0, 0, 0xfffff);
	imagecopyresampled($tmp_image, $image, 0, 0, 0, 0, $width, $height, $width * $radio, $height * $radio);
	
	imagejpeg($tmp_image, $new_name, 80);
}
resize(imagecreatefromjpeg('image.jpg'), 'new_image.jpg', 320, 240);

?>

كيف لي ان اقوم بدمجها مع هذا الكود ؟!!!

 

<?
include("include/config.php");
					$picat=time();
					$upload_dir = "pic/";
					$upload_url = $url_dir."pic/";
					$temp_name = $_FILES['pic']['tmp_name'];
					$file_name = $_FILES['pic']['name']; 
					$file_name = str_replace("\\","",$file_name);
					$file_name = str_replace("'","",$file_name);
					$ext=strstr($file_name,'.');
					$picu="file_".$picat.$ext;
					$file_path = $upload_dir.$picu;
					$ext = str_replace(".","",$ext);
					if($ext=='jpg' || $ext=='JPG' || $ext=='gif' || $ext=='GIF' || $ext=='png' || $ext=='PNG' || $ext=='bmp' || $ext=='BMP')					{
					move_uploaded_file($temp_name, $file_path);
					$picu=$picu;
					$fsize=filesize("$file_path");
					}
$insert="insert into news (titel,picat,note) values ('$titel','$picu','$note')";
$Result=mysql_query($insert);
if($Result)
{
echo"تم الاضافة بنجاح";
}
?>
#4

لا مشكلة أبدا ً , الكود المُعدل هو :

<?php
function resize($image, $new_name, $width, $height)
{
	$radio = imagesx($image) > imagesy($image) ? imagesx($image) / $width : imagesy($image) / $height;
	if (imagesx($image) > imagesy($image))
	{
		$height = imagesy($image) / $radio;
	}
	elseif (imagesy($image) > imagesx($image))
	{
		$width = imagesx($image) / $radio;
	}
	$tmp_image = imagecreatetruecolor($width, $height);
	imagefill($tmp_image, 0, 0, 0xfffff);
	imagecopyresampled($tmp_image, $image, 0, 0, 0, 0, $width, $height, $width * $radio, $height * $radio);

	imagejpeg($tmp_image, $new_name, 80);
}

include("include/config.php");

if(is_uploaded_file($_FILES['pic']['tmp_name']))
{
	$file_name = basename($_FILES['pic']['name']);
	$ext = strtolower(strstr($file_name, '.'));
	$picu = "file_" . time() . $ext;
	$file_path = "pic/" . $picu;
	if ($ext == 'jpg' OR $ext == 'gif' OR $ext == 'png' OR $ext == 'bmp')
	{
		
		move_uploaded_file($_FILES['pic']['tmp_name'], $file_path);
		resize(imagecreatefromjpeg($file_path), 'small_'. $picu, 320, 240);
		unlink($file_path);
	}
	$insert = "insert into news (titel,picat,note) values ('$titel','small_$picu','$note')";
	$Result = mysql_query($insert);
	if ($Result)
	{
		echo"تم الاضافة بنجاح";
	}
}
else
{
	echo 'لم يتم رفع أي ملف';
}
?>

لم يتسنى لي تجربة الكود السابق لذا في حال وجود أي خطأ يرجى ذكره هنا .

#5

السلام عليكم اخي الفاضل بالنسبة للكود المرفق فهوا يرفع الصورة بقاعدة البيانات فقط  ولكنها لا تذهب الي مجلد pic كما هوا مفترض ان يتم نقلها الى هذا المجلد عند الرفع فقط يتم تسجيل الاسم بقاعدة البيانات

#6

خطا مطبعي,  استبدلي السطر :

		resize(imagecreatefromjpeg($file_path), 'small_'. $picu, 320, 240);

بالسطر :

		resize(imagecreatefromjpeg($file_path), 'pic/small_'. $picu, 320, 240);

اتمنى ان تُحل المشكلة .

#7

ايضا اخي للاسف نفس المشكلة للعلم

 

معلومات المدخلات من الفورم تكون مشفرة

 

 

enctype="multipart/form-data"

 

يمكن انا يكون المشكل من هنا ؟

 

 

 

<form name=form1 method="POST" action="insert_news.php"  enctype="multipart/form-data">
	<div align="center">
				<input name="titel" size="34" dir="rtl" value="عنوان الخبر" ><p>
      			<input type="file" name="pic" size="13" dir="ltr" ></p>
		<p>
<textarea name=note id=sup rows=8 cols=36>

تفاصيل الخبر

</textarea></div>
									<p align="center">
									<input class="btn" value="اضافــة " type="submit" ></p>
	</p>
</form>

تم تعديل هذه المشاركة بواسطة fatmaali في 13 مارس 2013 في 17:19

#8

لا علاقة لخاصية enctype  بهذه المشكلة و لا علاقة لها برفع الملف وانما بالتحقق من امتداد الصورة في السطر :

	if ($ext == 'jpg' OR $ext == 'gif' OR $ext == 'png' OR $ext == 'bmp')

يجب ان يكون :

	if ($ext == '.jpg' OR $ext == '.gif' OR $ext == '.png' OR $ext == '.bmp')

اتمنى ان تكون المشكلة قد حُلت .

#9

طلعت هذة الاخطاء اخي الفاضل

 

 

Warning: imagecreatefromjpeg() [function.imagecreatefromjpeg]: gd-jpeg: JPEG library reports unrecoverable error: in C:\AppServ\www\newss\insert_news.php on line 32

Warning: imagecreatefromjpeg() [function.imagecreatefromjpeg]: 'pic/file_1363185476.gif' is not a valid JPEG file in C:\AppServ\www\newss\insert_news.php on line 32

Warning: imagesx(): supplied argument is not a valid Image resource in C:\AppServ\www\newss\insert_news.php on line 4

Warning: imagesy(): supplied argument is not a valid Image resource in C:\AppServ\www\newss\insert_news.php on line 4

Warning: imagesy(): supplied argument is not a valid Image resource in C:\AppServ\www\newss\insert_news.php on line 4

Warning: imagesx(): supplied argument is not a valid Image resource in C:\AppServ\www\newss\insert_news.php on line 5

Warning: imagesy(): supplied argument is not a valid Image resource in C:\AppServ\www\newss\insert_news.php on line 5

Warning: imagesy(): supplied argument is not a valid Image resource in C:\AppServ\www\newss\insert_news.php on line 9

Warning: imagesx(): supplied argument is not a valid Image resource in C:\AppServ\www\newss\insert_news.php on line 9

Warning: imagecopyresampled(): supplied argument is not a valid Image resource in C:\AppServ\www\newss\insert_news.php on line 15
تم الاضافة بنجاح

 

سوف ارفق لك اربع ملفات للمشروع مع القاعدة يمكن ان تساعدك بالامر

 

 

 

newss.zip

تم تعديل هذه المشاركة بواسطة fatmaali في 13 مارس 2013 في 23:42

#10
pic/file_1363185476.gif is not a valid JPEG file

الملف بصيغة gif و الدالة التي قمت بانشاءها تقوم بأخد صورة من صيغة jpg

لحل هذه المشكلة استخدمي الكود التالي :

<?php
function resize($image, $new_name, $width, $height, $ext)
{
    $radio = imagesx($image) > imagesy($image) ? imagesx($image) / $width : imagesy($image) / $height;
    if (imagesx($image) > imagesy($image))
    {
        $height = imagesy($image) / $radio;
    }
    elseif (imagesy($image) > imagesx($image))
    {
        $width = imagesx($image) / $radio;
    }
    $tmp_image = imagecreatetruecolor($width, $height);
    imagefill($tmp_image, 0, 0, 0xfffff);
    imagecopyresampled($tmp_image, $image, 0, 0, 0, 0, $width, $height, $width * $radio, $height * $radio);
        if($ext == 'gif')
        {
            $image = imagegif($tmp_image, $new_name);
        }
        elseif($ext == 'png')
        {
            $image = imagepng($tmp_image, $new_name);
        }
        elseif($ext == 'jpg')
        {
            $image = imagejpeg($tmp_image, $new_name);
        }
        
}

if(is_uploaded_file($_FILES['pic']['tmp_name']))
{
    $file_name = basename($_FILES['pic']['name']);
        $exp = explode('.', $file_name);
    $ext = strtolower($exp[count($exp)-1]);
    $picu = "file_" . time() . '.' .$ext;
    $file_path = "pic/" . $picu;
    if ($ext == 'jpg' OR $ext == 'gif' OR $ext == 'png')
    {
        move_uploaded_file($_FILES['pic']['tmp_name'], $file_path);
                if($ext == 'gif')
                {
                    $image = imagecreatefromgif($file_path);
                }
                elseif($ext == 'png')
                {
                    $image = imagecreatefrompng($file_path);
                }
                elseif($ext == 'jpg')
                {
                    $image = imagecreatefromjpeg($file_path);
                }

        resize($image, 'pic/small_'. $picu, 320, 240, $ext);
        unlink($file_path);
    }
    $insert = "insert into news (titel,picat,note) values ('$titel','small_$picu','$note')";
    $Result = mysql_query($insert);
    if ($Result)
    {
        echo "تم الاضافة بنجاح";
    }
}
else
{
    echo 'لم يتم رفع أي ملف';
}
?>

قمت بالكود السابق بحل مشكلة امتداد الصورة (اذا كان الملف باسم good.image.png فيصبح الامتداد png بدلا من image.png كما في الطريقة التي كنتي تستخدمينها ) و انشاء صورة لها نفس امتداد الصورة الاصلية ويمكن ان يكون الامتداد png او jpg أو gif

تم تعديل هذه المشاركة بواسطة Abd Allatif في 13 مارس 2013 في 18:15

#11

حاليا يرفع الصورة ولكن لا يكتب بالصفحة تم بنجاح او يظهنر رسالة الخطاء فلا اعرف هل تم الرفع او لا يجيب صفحة بيضاء يمكنك التجربة بالملف المرفق

 

       echo "تم الاضافة بنجاح";
    }
}
else
{
    echo 'لم يتم رفع أي ملف';
 

 

المفروض بعد الرفع يجيب تم بنجاح او لو في مشكلة يجيب لم يتم الرفع

 

بيجيب صفحة بيضاء فقط

 

ولكن ذهبت للتاكد من رفع الملف فوجدته مرفوع فى المجلد بشكل طبيعي

تم تعديل هذه المشاركة بواسطة fatmaali في 13 مارس 2013 في 23:48

#12 أفضل إجابة

المشكلة في الاتصال بقاعدة البيانات , لا تنسي اضافة السطر التالي:

include("include/config.php");
#13

فعلا لم الاحظ ذلك فى الكود السابق شاكرة جدا لك ومساعدتك وصدرك الرحب لتلقى المشاكل وسرعه وضع الحلول جعله الله فى ميزان حسناتك باذن الله اخي الفاضل

تم تعديل هذه المشاركة بواسطة fatmaali في 14 مارس 2013 في 21:18

هذا الموضوع مغلق.

مواضيع مشابهة