gd_lib - криво ресайзит

predator

web designer
gd_lib - криво ресайзит

вопервых, сразу предупреждаю, я знаю что такое imagemajic : )) но в данном случае нужно обойтись gd_lib

вовторых - всё нормально ресайзит за исключением иногда появляющихся (когда жмём F5) артефактов на картинке (зачернения, чёрные полосы)

кто-нить с таким сталкивался?

код не прилагаю - нету под рукой -
но суть в том что пикча генерится из дефолтной через тэг img

тип контента хедером выкидывается правильный. Чаще всё нормально срабатывает, но иногда...
 

predator

web designer
1) не, такая бага появляется у меня дома, на серв ещё не заливал
с памятью у меня всё нормально было - да и и если-бы она глючила приложение просто валилось-бы.
2) смотри пункт 1 - кроме меня никто по сайту не ходит, да и сайт простенький.

-~{}~ 29.09.05 14:46:

кстати забыл упомянуть конфигурацию : )
php4.3.11
gd_lib из комплекта - версия вроде 2.0.58, если не ошибаюсь
Сервер Apache 1.3.xx
WinXPSP1
 

predator

web designer
ага,
насколько я помню

ещё можно добавить что генерируемых картинк три штуки на странице (всмысле не одна единственная)
 

kruglov

Новичок
predator
>генерируемых картинк три штуки на странице
Т. е. если оставить одну, то глюка нет?
 

predator

web designer
Автор оригинала: kruglov
predator
>генерируемых картинк три штуки на странице
Т. е. если оставить одну, то глюка нет?
проверил - не глючит

нехотел тут высказывать догадки но
возможно из-за паралельного обращения к одному скрипту этот глюк и проявляется.
такие вещи поидее должны быть проработаны в пхп.

тока как с этим бороться так и неясно - то ли по хитрому sleep использовать то-ли сессию
 

SiMM

Новичок
> возможно из-за паралельного обращения к одному скрипту этот глюк и проявляется.
Apache какой?
 

SiMM

Новичок
Грешить на PHP не вижу оснований. Ищите косяки у себя. В 99% случаях - они именно там. В любом случае - до тех пор, пока вы не предоставите код (HTML + скрипт вывода картинки на 10 строк) и данные, на которых можно воспроизвести подобный глюк на любой другой машине - дальнейший разговор, ИМХО, лишён всякого смысла.
 

predator

web designer
система сложная
вот например функции отвечающие за вывод картинки:
PHP:
	function file_tumb( $_arrSet=array() ) {
		$_strSrc=empty( $_arrSet['src'] )?FILE_TUMB_NOIMAGE: DIR_DBFS.$_arrSet['src'];
		$_intFlgCu=empty( $_arrSet['cu'] )?FILE_TUMB_CASHING:$_arrSet['cu'];
		$_intFlgMt=empty( $_arrSet['mt'] )?FILE_TUMB_MORPHING:$_arrSet['mt'];
		$_intWnew=empty( $_arrSet['w'] )?FILE_TUMB_W:$_arrSet['w'];
		$_intHnew=empty( $_arrSet['h'] )?FILE_TUMB_H:$_arrSet['h'];
		if ( file_exists( $_strSrc ) ) {
			if ( $_intFlgMt==2 ) {
				header( 'Content-Type: image/jpeg' );
				readfile( $_strSrc );
				exit;
			}
			// calculate new image params
			list( $_intW, $_intH, $_intF )=GetImageSize( $_strSrc );
			$_intWold=$_intW;
			$_intHold=$_intH;
			if ( $_intFlgMt==0 ) { // fit size
				if ( $_intWnew==0 && $_intHnew!=0 ) {
					$_intWnew=(int)( $_intW*( $_intHnew/$_intH ) );
				}
				if ( $_intHnew==0 && $_intWnew!=0 ) {
					$_intHnew=(int)( $_intH*( $_intWnew/$_intW ) );
				}
				if ( $_intWnew!=0 && $_intWnew<$_intW ) {
					$_intH=(int)( $_intH*( $_intWnew/$_intW ) );
					$_intW=$_intWnew;
				}
				if ( $_intHnew!=0 && $_intHnew<$_intH ) {
					$_intW=(int)( $_intW*( $_intHnew/$_intH ) );
					$_intH=$_intHnew;
				}
			} elseif ( $_intFlgMt==1 ) { // exact size
				$_intW=$_intWnew;
				$_intH=$_intHnew;
			}
			// if use cashe
			if ( !empty( $_intFlgCu ) ) {
				$_strCasheFile=FILE_TUMB_CPATH.md5( $_strSrc.filemtime( $_strSrc ).$_intW.$_intH ).'.pic';
				// check the cashe
				if ( 0==FILE_TUMB_CFORCE&&file_exists( $_strCasheFile ) ) {
					list( $_intCW, $_intCH, $_intCF )=GetImageSize( $_strCasheFile );
					// show image
					if ( $_intCW==$_intW&&$_intCH==$_intH&&$_intCF==$_intF ) {
						header( 'Content-Type: image/jpeg' );
						readfile( $_strCasheFile );
						exit;
					}
				}
				// remove old cached images with delete old files
				$this->dir_readfiles( $arrFiles, FILE_TUMB_CPATH, 1 );
				// save thumbnail to cash
				if ( FILE_TUMB_METHOD==1 ) {
					$this->gen_thumb_bygd( $hdl, $_strSrc, $_intF, $_intW, $_intH, $_intWold, $_intHold );
					@imagejpeg( $hdl, $_strCasheFile, FILE_TUMB_QUALITY );
					imagedestroy( $hdl );
				} else {
					system( '/usr/bin/convert -quality '.FILE_TUMB_QUALITY.' -antialias -geometry '.$_intW.'x'.$_intH.' "'.$_strSrc.'" "'.$_strCasheFile.'"' );
				}
				// show image
				if ( file_exists( $_strCasheFile ) ) {
					header( 'Content-Type: image/jpeg' );
					readfile( $_strCasheFile );
					exit;
				}
			}
			// if create thumb on-the-fly (only through gd_lib)
			$this->gen_thumb_bygd( $hdl, $_strSrc, $_intF, $_intW, $_intH, $_intWold, $_intHold );
			// show image
			header( 'Content-type: image/jpeg' );
			@imagejpeg( $hdl );
			imagedestroy( $hdl );
			exit;
		}
		$this->_errorcode[]='ERR_FILE_EXISTS';
		return false;
	}

	// generate thumb by gd_lib
	function gen_thumb_bygd( &$hdl, $_strSrc, $_intF, $_intW, $_intH, $_intWold, $_intHold ) {
		switch ( $_intF ) {
			case IMAGETYPE_GIF: $source=@imagecreatefromgif( $_strSrc ); break;
			case IMAGETYPE_JPEG: $source=@imagecreatefromjpeg( $_strSrc ); break;
			case IMAGETYPE_PNG: $source=@imagecreatefrompng( $_strSrc ); break;
		}
		$hdl=imageCreateTrueColor( $_intW, $_intH );
		imagecopyresampled( $hdl, $source, 0, 0, 0, 0, $_intW, $_intH, $_intWold, $_intHold );
		imagedestroy( $source );
		if ( !empty( $hdl ) ) {
			return true;
		}
		return false;
	}
запускается всё это дело так (часть файла fs.php):
PHP:
	if ( !empty( $_GET['src'] ) ) {
		$objF=new fs_driver;
		$objF->file_tumb( $_GET );
	}
а в html выглядит вот так:
<img src="/fs.php?src=symply.jpg&w=50&h=50">

-~{}~ 01.10.05 14:28:

конфигурацию софта - смотри выше
 

predator

web designer
пагадите пагадите,

вопервых ты просил посмотреть код
откуда я знаю какие 10 сторочек тебе особенно интересны? : ))

вовторых я не говорил что ничего не работает
я сказал что иногда возникают артефакты на сгенерённой картинке.

я не понял - что с чем надо смешать?

без обид : )

-~{}~ 01.10.05 16:44:

спасибо за на водку!

заменил
PHP:
		switch ( $_intF ) {
			case IMAGETYPE_GIF: $source=@imagecreatefromgif( $_strSrc ); break;
			case IMAGETYPE_JPEG: $source=@imagecreatefromjpeg( $_strSrc ); break;
			case IMAGETYPE_PNG: $source=@imagecreatefrompng( $_strSrc ); break;
		}
на

PHP:
$source = imagecreatefromstring(file_get_contents($_strSrc));
вот оказывается что : ))
 

SiMM

Новичок
> откуда я знаю какие 10 сторочек тебе особенно интересны? : ))
10 строчек, которые позволяют воспроизвести проблему. Без всяких других излишеств, к проблеме не относящихся. Пример, как это должно было выглядеть, я тебе продемонстрировал. В следующий раз будь умнее и не пость на форум всякую белиберду, к проблеме не относящуйся - твой код скорее всего будет просто проигнорирован.

> вот оказывается что : ))
Вообще-то врядли это является причиной артефактов.
 

predator

web designer
Автор оригинала: SiMM
> откуда я знаю какие 10 сторочек тебе особенно интересны? : ))
10 строчек, которые позволяют воспроизвести проблему. Без всяких других излишеств, к проблеме не относящихся. Пример, как это должно было выглядеть, я тебе продемонстрировал. В следующий раз будь умнее и не пость на форум всякую белиберду, к проблеме не относящуйся - твой код скорее всего будет просто проигнорирован.
т.е. ты хочешь сказать что сейчас я не совсем умный?
похоже ты сегодня не с той ноги
мот у тебя проблема?

> вот оказывается что : ))
Вообще-то врядли это является причиной артефактов.
да, но они пропали - хотя востановив старый вариант убедился что их тоже нет
странно всё это
 
Сверху