Оптимизация или ещё чего

Форум для программистов

Сообщение Majesty » Пт июн 18, 2004 3:54 am

Вот такой прикол.
Фотошоп на моём компе прозрачность картинок практически любого размера меняет не задумываясь.
Попробовал реализовать это на РНР...
Получилось. Единственная гадость - работает это только для маааалюсеньких картинок (10х10рх легко обрабатывает). Как только дело доходит до картинок нормальных размеров - стопорится где-то на 250 итерации (то есть меняет прозрачность 250-ти точек, а дальше идёт всё сплошным цветом последней изменённой точки). Думал, может памяти не хватает, задал гиг - результат тот же Машинка у меня не слабая в общем-то, Атлон ХР 1.8+ и всё равно Изображение
Вот и думаю - а не допустил ли я где-нибудь ошибку?
Подскажите, кто знает?
Вот код:
Код: выделить все
<?php

$out = "jpeg";
$name1 = "08_02.jpg";
$name2 = "8.jpg";
$opacity = 80;

error_reporting(E_ALL);
set_time_limit(0);

header("Content-type: image/".$out);

function pixel_transparent($left, $top, $im1, $im2, $opacity){
$index1 = ImageColorAt($im1, $left, $top);
$index2 = ImageColorAt($im2, $left, $top);
$rgb1 = ImageColorsForIndex($im1, $index1);
$rgb2 = ImageColorsForIndex($im2, $index2);
$result['red'] = ((($rgb1['red']-$rgb2['red'])*$opacity)/100)+$rgb2['red'];
$result['green'] = ((($rgb1['green']-$rgb2['green'])*$opacity)/100)+$rgb2['green'];
$result['blue'] = ((($rgb1['blue']-$rgb2['blue'])*$opacity)/100)+$rgb2['blue'];
return $result;
};

function open_image($name){
$image_info = GetImageSize($name);
switch($image_info[2]){

case "1":
 $im = ImageCreateFromGif($name);
break;

case "2":
 $im = ImageCreateFromJpeg($name);
break;

case "3":
 $im = ImageCreateFromPng($name);
break;
};

$image_info['handler'] = $im;
$image_info['width'] = $image_info[0];
$image_info['height'] = $image_info[1];

return $image_info;
};

$im1 = open_image($name1);
$im2 = open_image($name2);

$im_r = ImageCreate($im2['width'], $im2['height']);

for($i=0; $i<$im2['height']; $i++){
if($i>$im1['height']) break;
for($a=0; $a<$im2['width']; $a++){
if($i>$im1['width']) break;
$color = pixel_transparent($a, $i, $im1['handler'], $im2['handler'], $opacity);
      $c = ImageColorAllocate($im_r, $color['red'], $color['green'], $color['blue']);
      ImageFilledRectangle($im_r, $a, $i, $a, $i, $c);
      unset($c, $color);
  };
};

switch($out){
case "png":
       ImagePNG($im_r);
      break;

      case "gif":
       ImageGif($im_r);
      break;

      case "jpeg":
       ImageJpeg($im_r);
      break;
  };
ImageDestroy($im_r);
unset($im1, $im2, $color);

?>
<span style='color:black'>Everything That Has A Begining Has An End</span>
Majesty
Лейтенант
 
Сообщений: 83
Зарегистрирован: Вт ноя 18, 2003 10:45 am
Откуда: Almaty/KZ
Пункты репутации: 0

Вернуться в Программирование

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

cron