Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Загрузка png (портится фон)
Форумы портала PHP.SU » PHP » Программирование на PHP » Загрузка png (портится фон)

Страниц (2): [1] 2 »
 

1. dmaw - 10 Апреля, 2010 - 16:39:17 - перейти к сообщению
При загрузке png-изображений скрипт делает прозрачный фон картинки чёрным, как исправить не знаю, куски моего кода:

PHP:
скопировать код в буфер обмена
  1.         elseif(preg_match('/[.](png)$/', $userfile_name))
  2.         {
  3.                 $im = imagecreatefrompng($_FILES['filename']['tmp_name']);
  4.         }


PHP:
скопировать код в буфер обмена
  1.         $canvas = imagecreatetruecolor($newx, $newy); //новые размеры  
  2.         imagecopyresampled($canvas, $im, 0, 0, 0, 0, $newx, $newy, $imx, $imy);
  3.         $imagejpeg = imagejpeg($canvas, $folder_uploads.$userfile_name_array[0].'.'.$userfile_name_array[1],90);

(Добавление)
Наверное для каждого типа картинки нужно использовать свою функцию, в моём случае imagepng()

Я прав?
2. Мелкий - 10 Апреля, 2010 - 16:48:33 - перейти к сообщению
dmaw пишет:
Наверное для каждого типа картинки нужно использовать свою функцию, в моём случае imagepng()

У jpeg нету прозрачного фона, естественно он пропадает и закрашивается дефолтным цветом - чёрным.
3. z-kzn-z - 10 Апреля, 2010 - 18:50:15 - перейти к сообщению
если хотите сделать, скажем, белый цвет (вместо альфа-канала) в jpg, можно как-то так..
вот я попробовал с png картинкой с прозрачностью, работает

PHP:
скопировать код в буфер обмена
  1. $img = imagecreatefrompng('alpha.png');
  2. $w = imagesx($img);
  3. $h = imagesy($img);
  4.  
  5. $img2 = imagecreatetruecolor($w, $h);
  6. imagefilledrectangle($img2, 0, 0, $w, $h, imagecolorallocate($img2, 255, 255, 255));
  7. imagecopyresampled($img2, $img, 0, 0, 0, 0, $w, $h, $w, $h);
  8.  
  9. imagejpeg($img2, 'new.jpg');


то есть создать новое изображение, залить его белым цветом, и наложить сверху старое
4. JustUserR - 11 Апреля, 2010 - 14:10:01 - перейти к сообщению
dmaw пишет:
При загрузке png-изображений скрипт делает прозрачный фон картинки чёрным, как исправить не знаю
В принципе можно решить данную проблему со стороны клиента с помощью CSS-опции фильтра filter:chroma(color='#AABBCC') - в таком случае браузер выделит нужные части изображения и сделает их прозраными (Это работает для любых картиночных типов поддерживаемых в теге img Улыбка -и длаее вних подкладываете изображение которым будете заменять фон
5. dmaw - 11 Апреля, 2010 - 18:56:24 - перейти к сообщению
Дело в том, что мне просто необходимо, чтобы фон оставался прозрачным!
6. altermann - 11 Апреля, 2010 - 20:30:44 - перейти к сообщению
Сохраняй тогда изображение или в .png или в .gif, в .jpg ты не сделаешь прозрачный фон.
7. dmaw - 12 Апреля, 2010 - 09:37:56 - перейти к сообщению
Мой вопрос касается именно png-изображений.
dmaw пишет:
При загрузке png-изображений скрипт делает прозрачный фон картинки чёрным, как исправить не знаю, куски моего кода:
8. Мелкий - 12 Апреля, 2010 - 09:53:10 - перейти к сообщению
dmaw, про что и говорят:
altermann пишет:
Сохраняй тогда изображение или в .png

Вы сохраняете в jpeg, а jpeg не поддерживает прозрачный фон.
Вы уже на свой вопрос в первом же сообщении ответили.
9. Телевизор - 12 Апреля, 2010 - 12:58:26 - перейти к сообщению
паройся в нете насщет png
я сталкивался с ie5 он голубым фоном делает, натыкался на прогу она исправляет это,
я так предполагаю и в тваем случае эта програмка поможет сделать чистый прозрачный фон во многих браузерах.
______________________
попытка не пытка
10. dmaw - 12 Апреля, 2010 - 14:07:14 - перейти к сообщению
Пока ничего путного не получается. Фон или чёрный или весь покоцаный, картинка при любом исходе теряет своё качество, подходящих примеров в Интернете не нашёл.
PHP:
скопировать код в буфер обмена
  1. $canvas = imagecreate($snewx, $snewy);
  2. imagecopyresampled($canvas, $im, 0, 0, 0, 0, $snewx, $snewy, $imx, $imy);
  3. imagepng($canvas, $folder_uploads_small.$userfile_name_array[0].'.'.$userfile_name_array[1]);
11. altermann - 12 Апреля, 2010 - 23:37:55 - перейти к сообщению
Попробуй сделать так:
PHP:
скопировать код в буфер обмена
  1. $black=imagecolorclosest($im, 0, 0, 0);
  2. // Задание прозрачности черного цвета фона
  3. imagecolortransparent($im, $black);


перед:
PHP:
скопировать код в буфер обмена
  1. $canvas = imagecreate($snewx, $snewy);
  2. imagecopyresampled($canvas, $im, 0, 0, 0, 0, $snewx, $snewy, $imx, $imy);
12. JustUserR - 13 Апреля, 2010 - 16:54:16 - перейти к сообщению
dmaw пишет:
Дело в том, что мне просто необходимо, чтобы фон оставался прозрачным!
Не все типы изображений полноценно поддерживают альфа-канал - в данном случае реализацию прозрачности можно понимать как создание подложки и вырезка определенного цвета - это можно сделать с помощью CSS-фильров chroma и opacity к примеру
13. dmaw - 14 Апреля, 2010 - 09:49:59 - перейти к сообщению
altermann, спасибо за попытку, но всё равно не работает. Картинка портится, фон чёрный или грубо обгрызеный.

Нашёл ещё один пример, но и он не хочет делать фон у картинки прозрачным http://forum.php.su/topic.php?fo...=1&topic=530

Дёгтю ещё добавляет полупрозрачная тень, даже если фон становится прозрачным, то тень убожество.
(Добавление)
Вопрос решён,отдельное спасибо создателю форума, поиску Яндекс и конкретно valenok за пример.
14. altermann - 14 Апреля, 2010 - 15:05:14 - перейти к сообщению
А можешь саму картинку скинуть?
На мыло altermann[at]ua.fm , или здесь выложи
15. dmaw - 14 Апреля, 2010 - 15:53:14 - перейти к сообщению
Картинку выкладывал выше, а вообще уже всё разрешилось, спасибо.
dmaw пишет:
Вопрос решён,отдельное спасибо создателю форума, поиску Яндекс и конкретно valenok за пример.

 

Powered by ExBB FM 1.0 RC1