Jump to content
  • 0

Помогите разобраться с изменением размера картинок... в пикселях и байтах.


andrums
 Share

Question

Есть задача привести тучу картинок к нужному размеру (в пикселях и байтах). С пикселями разобрался, а вот с байтами какая то загвозда. Есть код:

function re_size ($src, $width, $height)
{
if($width>$height) $ratio=$width/150;
else $ratio=$height/150;

$new_width=round($width/$ratio);
$new_height=round($height/$ratio);

$idest = imagecreatetruecolor($new_width, $new_height);
$image = imagecreatefromJPEG($src);

imagecopyresampled ($idest, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);

imagejpeg($idest, $src, 100);

imagedestroy($image);
imagedestroy($idest);
return true;
}

function re_weight($src)
{
$quality=95;
$dsrc='try_w.jpg';
$image = imagecreatefromJPEG('try.jpg');

//size=getimagesize('try.jpg');
do {
imagejpeg($image, $dsrc, $quality);
$quality-=5;
}
while(filesize('try_w.jpg')>10000);

imagedestroy($image);
copy('try_w.jpg', $src);

unlink('try_w.jpg');
return true;
}

foreach($_SESSION['filename'] as $v ) {

copy('old_img/'.$v, 'try.jpg');

$size=getimagesize('try.jpg');
if($size[0]>150 || $size[1]>150) re_size('try.jpg', $size[0], $size[1]);

if(filesize('try.jpg')>10000) re_weight('try.jpg');

copy('try.jpg', 'new_img/'.$v);
unlink('old_img/'.$v);
unlink('try.jpg');
}

Работает правильно. Все делает как надо, но только функция re_weight() спотыкается на некоторых картинках и начинает снова и снова создавать try_w.jpg, хотя размер уже меньше 10кб. Все картинки с расширением jpg.

При этом виснет сервер и его приходиться перезапускать.

Может кто нибудь понимает, почему это происходит???

Или посоветуйте альтернативный способ изменения размера (требуется, чтобы файл был не более 10кб)...

Заранее спасибо!

Link to comment
Share on other sites

4 answers to this question

Recommended Posts

  • 0

Насколько я помню, результат ф-ции filesize (и нескольких других ф-ций файловой системы) кешируется. Чтобы получить обновленные данные, нужно юзать clearstatcache.

А вообще обязательно ли без конца переписывать временный файл? Через размер буфера разве нельзя решить задачу?

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy