PDA

View Full Version : كوچك ساز تصاوير



amirhosein
جمعه 11 بهمن 1387, 00:23 صبح
من براي بخش اخبار سايتم ميخوام يه كوچك ساز تصاوير بذارم تا آدرس يه عكس آپلود شده رو بهش بدم و برام عكس thumbnail اش رو بسازه. كلاسش رو از سايت phpclasses.org گرفتم اما مشكلش اينه كه اومده از تابع ImageCreateFromJPEG استفاده كرده كه براي عملكرد صحيح اين تابع بايد متغير allow_url_fopen توي فايل php.ini روي مقدار true تنظيم شده باشه اما اكثر هاستها بابت مسايل امنيتي اون رو خاموش ميكنن! و در نتيجه كد كار نميكنه. حالا ميخوام ببينم راه حل چيه؟ البته اين رو هم بگم كه با تابع ini_set هم نتونستم اين متغير رو تغيير بدم!

amirhosein
جمعه 11 بهمن 1387, 12:06 عصر
يعني كسي چيزي نميدونه؟!

I,Nobody
جمعه 11 بهمن 1387, 12:15 عصر
شما 3 تا راه حل داری :
1- یه اسکریپت دیگه پیدا کنی
2- یه هاست که ساپورتش کنه پیدا کنی
3- خودتون بصورت دستی php.ini رو ست کنید. برای این کار هم باید دستور مربوط به ست کردن php.ini رو در یک فایل بنویسید، اون فایل رو به نام php.ini ذخیره کنید، قرارش بدید توی فولدری که قراره اسکریپت مربوطه اجرا بشه.

احتمالاً شما راه سوم رو انتخاب می کنید:چشمک:

amirhosein
جمعه 11 بهمن 1387, 12:48 عصر
بابت توجه تون متشكرم. اگه كار كنه حرفي نيست هرچند به شخصه مورد اول رو بيشتر ترجيح ميدم!
چك مي كنم و خبرتون مي كنم.

amirhosein
جمعه 11 بهمن 1387, 12:58 عصر
برادر نشد!
شما درخصوص مورد اول گزينه اي رو سراغ ندارين؟

amirhosein
جمعه 11 بهمن 1387, 16:51 عصر
نكته عجيب اينه كه پارامتر allow_url_fopen رو ميخوام با دستور ini_set فعال كنم و نميشه درحاليكه توي مستندات PHP تصريح شده كه اين پارامتر قابليت تغيير توسط اين تابع رو داره!

I,Nobody
جمعه 11 بهمن 1387, 18:56 عصر
من پیشنهاد میدم به جای استفاده از ini_set ، از خود فایل php.ini استفاده کنید.
اگر هم میخواید انتخاب اول را برگزینید، می تونید از php classes یا hotscripts استفاده کنید یا در گوگل عباراتی شبیه image resizer php class یا thumbnailer php class یا یه همچین چیزایی رو سرچ کنید.

amirhosein
جمعه 11 بهمن 1387, 23:33 عصر
عرض كردم كه نقداً هر راهي كه مشكل رو حل كنه حرفي ندارم.
درخصوص نمونه كد هم از همون phpclasses استفاده مي برم استفاده بردني! اما تقريبا تمام كدهايي كه گرفتم از اين تابع دارن استفاده ميكنن كه مشكل داره.
من فايل PHP.INI رو كنار اسكريپتم ريختم درسته؟ نبايد توي روت سايت باشه يا تنظيماتي چيزي بخواد؟

I,Nobody
شنبه 12 بهمن 1387, 06:51 صبح
فايل php.ini بايد كنار همون اسكريپتي كه ميخواد اجرا بشه باشه و روي subfolder ها هم تاثيري نداره. ولي بايد اسمش php.ini باشه نه PHP.INI

amirhosein
دوشنبه 14 بهمن 1387, 08:47 صبح
جناب یعقوبیان شما نظری نداری؟ :چشمک:

sama01
دوشنبه 14 بهمن 1387, 12:00 عصر
فکر می‌کنم مساله شما اصلا کوچک‌سازی تصویر نیست. ارتباط به یک آدرس وب است.
درسته؟

yaqubian
دوشنبه 14 بهمن 1387, 12:04 عصر
دوست عزیز
من خودم از این استفاده می کنم

<?php

function make_thumb($image_folder, $image_name)
{
// Firest check if GD is enabled
if (!extension_loaded('gd') && !function_exists('gd_info'))
exit('GD is not enabled, can not make thumbnail!');

//Check if thumb dir exists
if (!is_dir($image_folder.'/thumbs'))
mkdir($image_folder.'/thumbs', 0700);

// Get extension
$ext = get_ext($image_name);

// Open the image so we can make a thumbnail
if ($ext == 'jpg')
$o_img = imagecreatefromjpeg($image_folder.'/'.$image_name);
else if ($ext == 'png')
$o_img = imagecreatefrompng($image_folder.'/'.$image_name);
else if ($ext == 'gif')
$o_img = imagecreatefromgif($image_folder.'/'.$image_name);
else
return false;

// Get width and height of orginal image
$o_width = imagesx($o_img);
$o_height = imagesy($o_img);

// Calculate new width and height
$new_width = 150;
$new_height = floor($o_height * (150 / $o_width));

if($o_height > $o_width)
{
$tmp = $o_height;
$o_height = $o_width;
$o_width = $tmp;
$new_width = 150;
$new_height = floor($o_height * (150 / $o_width));
$tmp = $o_height;
$o_height = $o_width;
$o_width = $tmp;
$new_width = $new_height;
$new_height = floor($o_height * ($new_width / $o_width));
}

// Copy image into new one
if ($o_width < 150)
{
$tmp_img = imagecreatetruecolor($o_width, $o_height);
imagecopyresampled($tmp_img, $o_img, 0, 0, 0, 0, $o_width, $o_height, $o_width, $o_height);
}
else
{
$tmp_img = imagecreatetruecolor($new_width, $new_height);
imagecopyresampled($tmp_img, $o_img, 0, 0, 0, 0, $new_width, $new_height, $o_width, $o_height);
}

// Save the thumbnail, but first check what kind of file it is
if ($ext == 'jpg')
imagejpeg($tmp_img, $image_folder.'/thumbs/thumb_'.$image_name, 85);
elseif ($ext == 'png')
imagepng($tmp_img, $image_folder.'/thumbs/thumb_'.$image_name);
elseif ($ext == 'gif')
imagegif($tmp_img, $image_folder.'/thumbs/thumb_'.$image_name);

// Destroy
imagedestroy($tmp_img);
}

// Get extension from image
function get_ext($filename)
{
$explode = explode('.', $filename);
return $explode[count($explode)-1];
}

?>
هیچ مشکلی هم نداره.
موفق باشید

amirhosein
شنبه 19 بهمن 1387, 21:56 عصر
جناب يعقوبيان نمونه اين كد رو زياد ديدم و دارم. مشكل من توي بازنكردن از يه آدرس هست اونم يه URL . به عبارت ديگه اين كدي كه شما گذاشتي مياد و از يه مسير روي همون هاستي كه اسكريپت كوچك ساز روشه عمليات رو انجام ميده اما مشكل من اينه كه ميخوام آدرس يه عكس رو از روي يه هاست ديگه بدم تا برام كوچيكش كنه.

yaqubian
یک شنبه 20 بهمن 1387, 08:21 صبح
دوست عزیز
اینو یه نیگاه بندازین:
http://www.zubrag.com/articles/create-website-snapshot-thumbnail.php
موفق باشید

amirhosein
دوشنبه 21 بهمن 1387, 09:05 صبح
آقای یعقوبیان ممنونم. سر فرصت مطالعه می کنم و اگه جالب بود دکمه تشکر رو بعداً میزنم :چشمک: