Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   perfect resize images (https://javascript.ru/forum/offtopic/30441-perfect-resize-images.html)

president 04.08.2012 12:41

perfect resize images
 
Вопрос конечно не по js - но я так и не нашел ответа поэтому может вы знаете

качественный ресайзер для картинок не знаете? Я перепробовал кучу библиотек для php они все одинаковые - но вот у вконтакте или у фейсбук ресайзеры отличные - что у них за ресайзеры?

мой сайт располагается так то на php

еще интересует модуль для улучшении качества фоток

Serg_pnz 04.08.2012 13:34

ImageMagick пробовал? По-моему у nic.ru в хостинге есть выбор между этой библиотекой и gd.

president 04.08.2012 14:51

imagemagick пробовал gd стоит - на php не предлагать там язык не тянет сделать лучше, нужен специальный ресайзер

devote 04.08.2012 15:08

Цитата:

Сообщение от president
на php не предлагать там язык не тянет сделать лучше, нужен специальный ресайзер

как это? на PHP есть отличный функционал для резайза картинок с лучшим качеством.. вы куда то не туда смотрите.

devote 04.08.2012 15:11

смотрите в сторону
imagecopyresampled

примерно так работает, ресайзит с идеальным качеством:
$src = imagecreatefromfile( $full_name );
$dest = imagecreatetruecolor( $new_width, $new_height );
imagecopyresampled( $dest, $src, 0, 0, 0, 0, $new_width, $new_height, imagesx( $src ), imagesy( $src ) );
далее $dest сохраняете в файл или еще куда.

devote 04.08.2012 15:19

забыл функцию кинуть:
function imagecreatefromfile( $filename ) {

	$ext = strtolower( pathinfo( $filename, PATHINFO_EXTENSION ) );

	switch( $ext ) {
		case "jpg":
		case "jpeg":
			$src = imagecreatefromjpeg( $filename );
			break;
		case "png":
			$src = imagecreatefrompng( $filename );
			break;
		case "gif":
			$src = imagecreatefromgif( $filename );
			break;
		case "bmp":
			$src = imagecreatefromwbmp( $filename );
			break;
		default:
			$src = null;
	}

	return $src;
}

president 04.08.2012 15:50

Цитата:

как это? на PHP есть отличный функционал для резайза картинок с лучшим качеством.. вы куда то не туда смотрите.
я раньше php вдоль и поперек использовал в что бы обнаружить качественный ресайз, ресайз фотографий людей, довольно сильно отличается от обычных картинок. Вконтакте например использует flash ресайз до этого у них тоже фотки были гг. Я потом когда вернусь к работе над фотками попробую ваш вариант но думаю что напрасно

devote 04.08.2012 15:54

Цитата:

Сообщение от president
попробую ваш вариант но думаю что напрасно

ну это вы зря... я заметил многие используют метод imagecopyresized для изменения размеров картинок/фото.. И в чем то они конечно правы, так как этот метод работает в разы быстрее, но метод imagecopyresampled работает медленно, но и это оправданно, так как он не просто тупо попиксельно ресайзит, а качественно ресамплит. Попробуйте думаю вас оно вполне устроит.

devote 04.08.2012 16:24

вот для примера фото до (738 x 800):
<img src="http://img-fotki.yandex.ru/get/5311/91024863.1ff/0_bdb51_9c6aa77d_XL" />

а теперь фото после (400 x 433):
<img src="http://s011.radikal.ru/i315/1208/ac/21f82b08a583.png" />


код выглядит так:
<?php

	function imagecreatefromfile( $filename ) {

		$ext = strtolower( pathinfo( $filename, PATHINFO_EXTENSION ) );

		switch( $ext ) {
			case "jpg":
			case "jpeg":
				$src = imagecreatefromjpeg( $filename );
				break;
			case "png":
				$src = imagecreatefrompng( $filename );
				break;
			case "gif":
				$src = imagecreatefromgif( $filename );
				break;
			case "bmp":
				$src = imagecreatefromwbmp( $filename );
				break;
			default:
				$src = null;
		}

		return $src;
	}

	// открываем файл
	$src = imagecreatefromfile( "before.png" );

	// установим новый размер ширины картинки
	$img_width = 400;

	// тут высоту подгоним под ширину, сохраняя пропорции
	if ( imagesx( $src ) > imagesy( $src ) ) {
		$new_width = $img_width;
		$new_height = $img_width / ( imagesx( $src ) / imagesy( $src ) );
	} else {
		$new_width = $img_width;
		$new_height = imagesy( $src ) / ( imagesx( $src ) / $img_width );
	}

	// создаем новый экземляр картинки
	$dest = imagecreatetruecolor( $new_width, $new_height );

	// параметры для картинок gif и png для сохранения альфа канала
	// если меняем картинку не png и не gif эти параметры не нужны
	imagecolortransparent( $dest, imagecolorallocatealpha( $dest, 0, 0, 0, 127 ) );
	imagealphablending( $dest, false );
	imagesavealpha( $dest, true );
	// ------------------------------------------------------------

	// ресамплим
	imagecopyresampled( $dest, $src, 0, 0, 0, 0, $new_width, $new_height, imagesx( $src ), imagesy( $src ) );

	// выводим в браузер
	header( "Content-Type: image/png;" );
	Imagepng( $dest );

?>

devote 04.08.2012 16:32

вот я залил к себе, можешь потестить выставляя разные размеры:
100 - http://spb-piksel.ru/test/?w=100
200 - http://spb-piksel.ru/test/?w=200
300 - http://spb-piksel.ru/test/?w=300
1000 - http://spb-piksel.ru/test/?w=1000
ну или свои размеры


Часовой пояс GMT +3, время: 14:30.