Черное-белое изображение средствами PHP

El Diablo

Доброе зло
Доброго времени суток, подскажите, я давно сформировал вот такую систему загрузки изображений:

PHP:
$array = array('jpg', 'JPG', 'png', 'gif');
$type = $_FILES['uploadfile']['type'];
if ($type == 'image/jpeg') {$filetype = str_replace('image/','',$type);}
$name = explode(".", $_FILES['uploadfile']['name']);
$exp = end($name);
$temp = $_FILES['uploadfile']['tmp_name'];
	if(in_array($exp, $array))
	{
    $uploaddir='partners/original';
	$thumbdir='partners/thumb';
    $uploadfile = $uploaddir.basename($_FILES['uploadfile']['name']);
		if (!is_uploaded_file($_FILES['uploadfile']['tmp_name']))
		{echo 'ошибка передачи файла';}
		else {
        	if(copy($temp,$uploadfile))
        	{
				if(!empty($uploadfile))
				{$uniqid = md5(uniqid(""));
					if(!empty($uniqid))
					{$renamefile = substr($uploadfile,11,-4);
					$newuploadfile = rename($uploadfile,$uploaddir.$uniqid.".jpg");
						if(!empty($newuploadfile))
						{$size = getimagesize ($uploaddir.$uniqid.".jpg");
						$width = $size[0];
						$height = $size[1];
							if($size[0]>100)
							{
									if ($width == $height) {$case=1;}
									if ($width > $height) {$case=2;}
									if ($width < $height) {$case=3;}
									switch ($case)
										{case 1:
											$newwidth=100;
											$newheight=100;
											$newimage = $newwidth."x".$newheight;
										break;
										case 3:
											$newheight=100;
											$ratio= $newheight / $height;
											$newwidth = round($width * $ratio);
											$newimage = $newwidth."x".$newheight;
										break;
										case 2:
											$newwidth=100;
											$ratio=$newwidth / $width;
											$newheight=$height * $ratio;
											$newimage = $newwidth."x".$newheight;
										break;
											}
											
									switch ($type)
										{case 'image/jpeg':
											$img = imagecreatefromjpeg( $temp );
											$thumb = imagecreatetruecolor( $newwidth, $newheight );
											imagecopyresized($thumb, $img, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
											imagejpeg ( $thumb, $thumbdir.$uniqid.".jpg",100);
											echo "Ваш файл был загружен со следующими параметрами:<br>Ширина ".$width." пикселей <br>Высота ".$height." пикселей <br><br>и приобразован в: ".$newimage."<br><br>
";
										break;

											}
												$ogede = $uploaddir.$uniqid.".jpg";
												$gede = $thumbdir.$uniqid.".jpg";
												$tes = "INSERT INTO generals_partners (pic1,pic2,title,link) VALUES ('".$gede."','".$ogede."','".$title."','".$link."')";
												
            									$res = mysql_query($tes);
           					 if($res) echo "Файл упешно загружен, загрузите еще!";
            				else echo "Путь не добавлен в базу данных, но файл загружен ".mysql_error().$about.$link.$city_array;
							}
							else echo "Качество файла удручает и печалит, а клиентов отпугнет, подищите пожалуйсто изображение более лучшего качества";
						}
						else echo "Не получен размер изображения";
					}
					else echo"Произошла ошибка с наречением файла новым именем :'(";
				}
				else echo "Файл не занесен в каталог с новым именем";
			}
        	else echo "Файл не загружен";	
		}
	}
	else echo "Неверное расширение файла, Загружать можно только фото (формата jpg)";
Но на данный момент у меня поднялся вопрос, превратить изображение в черно-белое, тобиш в первом коде, загружается картинка, далее она загружается в папку (original), также создается уменьшена копия, и также копируется в директорию (thumb), моя задача что бы урезанная картинка дублировалась в директорию к примеру (blackwithwhite) и там преобразовывалась в черно-белый вариант.

Я также нашел один из способов вот код:
PHP:
$image = imagecreatefrompng($img_src);
imagefilter($image, IMG_FILTER_GRAYSCALE);
imagepng($image,'result.png' );
imagedestroy($image);
( источник )

$img_src это путь к исходному изображению, в моем случае если продублировать урезанный вариант в директорию blackwithwhite и нужно указать путь к нему и пережать в черно-белый. Подскажите как склеить эти 2 кода? также приветствуются свои варианты =)

С благодарностью и уважением El Diablo.
 

SimbiX

Новичок
PHP:
else echo"Произошла ошибка с наречением файла новым именем :'(";
да, это действительно :'(



после:
PHP:
imagejpeg ( $thumb, $thumbdir.$uniqid.".jpg",100);
сделайте:
PHP:
imagefilter($thumb, IMG_FILTER_GRAYSCALE);
imagepng($thumb, 'blackwithwhite' . DIRECTORY_SEPARATOR . $uniqid . '.png');
imagedestroy($thumb);
 

El Diablo

Доброе зло
Я теперь столкнулся с такой проблемой, если например у меня png, то прозрачный преобразуется в черный, пример:
Untitled-1.jpg

Как я понял канал альфа можно настраивать только в фильтре:
IMG_FILTER_COLORIZE: То же, что и IMG_FILTER_GRAYSCALE, за исключением того, что можно задать цвет. Используйте аргументы arg1, arg2 и arg3 для указания каналов red, green, blue, а arg4 для alpha канала. Диапазон для каждого канала цвета от 0 до 255.
Если это так и фильтр IMG_FILTER_GRAYSCALE не работает с альфа то как можно решить этот вопрос малыми жертвами?
 
Сверху