Jump to content
  • 0

php работа с грфикой


Mike-Eci
 Share

Question

Здравствуйте! :з)

в общем то все работает, только немного не правильно. подскажите в чем косяк ^_^

написал код (пользуясь примером загрузки файла на сервер)

происходит следующее:

загружается файл

содержимое файла впиихивается в переменную

пропорционально уменьшается, либо увеличивается

сохраняется на серваке в папке пользователя

и цвета все меняются! как будто диапазон цветовой сужается. причем независимо в jpg я сохраняю или в png.

//—————————--ЗАГРУЗКА ФАЙЛА————————————————————
if(isset($_FILES["myfile"])){//———————————проверка на сузествование файла
$myfile = $_FILES["myfile"]["tmp_name"];
$myfile_name =$_FILES["myfile"]["name"];
$myfile_size = $_FILES["myfile"]["size"];
$myfile_type = $_FILES["myfile"]["type"];
$error_flag = $_FILES["myfile"]["error"];
$mfs=$_POST["MAX_FILE_SIZE"];

if($error_flag == 0){ // Если ошибок не было———————————————————
$handle = fopen($myfile, "rb");
$content = fread($handle, filesize($myfile));
fclose($handle);
$src_im=imagecreatefromstring($content);
$srcX=0;
$srcY=0;
$srcW=imageSX($src_im);
$srcH=imageSY($src_im);
if (($srcW/$srcH)>1.4)
{$dstW=182;
$dstH=$srcH/($srcW/182);}
else
{$dstH=130;
$dstW=$srcW/($srcH/130);}
if ($srcW*3<182 and $srcH*3<130)
{$dstW=$srcW*3;
$dstH=$srcH*3;}
$dst_im=imagecreate ($dstW, $dstH);
$dstX=0;
$dstY=0;

imageCopyResized($dst_im, $src_im, $dstX, $dstY, $srcX, $srcY, $dstW, $dstH, $srcW, $srcH);
$picture_left="img".$id.".png";
imagePNG($dst_im, $uploaddir.$picture_left);

$query = "UPDATE $base.$table SET pict = '$picture_left' WHERE $table.id=$id";
mysql_query( $query, $link ); // Выполняем запрос
mysql_close($link);
}//——————————————--КОНЕЦ проверки на наличие ошибок )))
}//——————————————КОНЕЦ проверки на существование файла

Edited by Mike-Eci
Link to comment
Share on other sites

13 answers to this question

Recommended Posts

  • 0
Я делал не так, но сталкивался с подобной проблемой. Решил так:

imageCreateFromJpeg+imagecreatetruecolor+imageCopyResampled в итоге получилось все нормально

оооо!!! огромное спасибо!!!

imagecreatetruecolor

вот это меня спасло!! ^_^ огромное Вам спасибо Ышо раз!

Link to comment
Share on other sites

  • 0
Здрасте снова! подскажите, пожалуйста как определить какой цвет на картинке сделан прозрачным? например на гифке.

функция imageColorTransparent($img);

вернет идентификатор установленного до этого прозрачного цвета или false в случае его отсутствия.

Link to comment
Share on other sites

  • 0

imagecolortransparent - определяет цвет как прозрачный.

http://php.su/functions/?imagecolortransparent

:-( это не то..

такое работает не правильно:

$back_color=ImageColorTransparent($src_im);

if ($back_color != false)

{

imageColorTransparent($dst_im, $back_color);

ImageCopyResized($dst_im, $src_im, $dstX, $dstY, $srcX, $srcY, $dstW, $dstH, $srcW, $srcH);

}

else

ImageCopyResampled($dst_im, $src_im, $dstX, $dstY, $srcX, $srcY, $dstW, $dstH, $srcW, $srcH);

Edited by Mike-Eci
Link to comment
Share on other sites

  • 0

Во-первых, применил функцию ты не правильно.

Во-вторых, насколько я понял, тебе нужно выбрать какую из двух функций применять ImageCopyResized() или ImageCopyResampled(), для этого определять какой цвет на картинке сделан прозрачным не надо.

Выбор между ними актуален если только происходит увеличение изображения.

ImageCopyResized() используй для gif и png

ImageCopyResampled() используй для jpg

Link to comment
Share on other sites

  • 0
почему вы не перемещаете загруженный файл?

не перемещаю файл потому что мне все равно придется с ним работать. а точнее мне нужно его уменьшить или увеличить. в зависимости от его размеров.

я плохо знаю ПХП. мне не известно сейчас как можно уменьшить картинку кроме как imageCopyResized imageCopyResampled

так что перемещение будет лишним действием.

Во-первых, применил функцию ты не правильно.

а как правильно? подскажите, если не сложно. как я понимаю она вообще не может возвращать цвет.

Во-вторых, насколько я понял, тебе нужно выбрать какую из двух функций применять ImageCopyResized() или ImageCopyResampled(), для этого определять какой цвет на картинке сделан прозрачным не надо.

да, мне действительно нужно выбрать одну из этих функций, но только в случае обозначенного цвета на картинке источнике как прозрачный использовать ресайзед в остальных случаях ресеплед

что бы наглядно стало видно что делатся с изображением - привожу конкретный пример:

такой была картинка до попадания в пхп (gif) pict.gif

такой стала после ресайзед img1.png

а такой полсе ресеплед img8.png

то же самое она делает и с жпег и со всеми остальными изображениями.

а вот что происходит в браузере после ресамплед с бывшей гиф у которой был прозрачный фон:

img32.png

а реальный файл лежит в папке и весь фон у него черный. без этих дырок

(при этом с ресайзед все нормально)

и вот прям ради интереса посмотрите свойства картинки релакс, скачайте на комп и посмторите в проге для просмотра.. очень разница видимая. :lol:

Edited by Mike-Eci
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