页:
[1]
2
| jxxysong | 2004-7-28 04:18 PM |
|
按比例生成缩略图
找到一个按比例生成缩略图的代码,发与大家分享。
[php]
<?php
#########################################################
# #
# Release....: ImageVue.v1.4.PHP.NULL-WDYL #
# Date.......: 01/30/04 #
# Released...: WDYL #
# Protection.: CallHome, License Check, Refferer Links #
# URL........: http://www.imagevuex.com #
# #
#########################################################
$img=$_GET['img'];
$path = substr($img, 0, strrpos($img, '/'));
$file = substr($img, strrpos($img, '/') + 1);
$tnpath = $path . '/tn_' . $file;
if (@file_exists($tnpath)) {
Header("Content-type: image/jpeg");
readfile($tnpath);
} elseif (!file_exists($img)) {
die("Image doesn't exist");
} else {
if (function_exists("imagecreatefromjpeg") and function_exists("imagecreatetruecolor")) {
$orig_image = imagecreatefromjpeg($img);
$orig_x = imagesx($orig_image);
$orig_y = imagesy($orig_image);
if (($orig_x / $orig_y) >= (4 / 3)) {
$y = round($orig_y / ($orig_x / 158));
$x = 158;
} else {
$x = round($orig_x / ($orig_y / 118));
$y = 118;
}
$sm_image = imagecreatetruecolor($x, $y);
Imagecopyresampled($sm_image, $orig_image, 0, 0, 0, 0, $x, $y, $orig_x, $orig_y);
Header("Content-type: image/jpeg");
imageJPEG($sm_image, '', 80);
@imageJPEG($sm_image, $tnpath, 80);
imagedestroy ($sm_image);
imagedestroy ($orig_image);
} else {
header("Content-type: image/jpeg");
readfile ('thumb.jpg');
}
}
?>
[/php] |
| duketang | 2004-7-28 06:07 PM |
|
实用的东西我顶~
带个正则问题
[url]http://www.phpx.com/happy/thr75443.html[/url] |
| seaman4444 | 2004-7-29 12:45 AM |
|
请问楼主,这种缩略图会出来大图缩小后失真的现象吗??
就是像素挤压在一起的那种感觉,可能说得不够专业,相信大家能懂吧..当图片很大时,比如800*600,如果生成400*300的缩略图就会出现失真,特别是人物照特别明显....
随便问一问,有没有好方法让生成的缩略图在图片大小缩小的同时,其像素也缩小而不至于失真.谢谢 |
|
我认为还是直接生成小图片会好一点,因为这样的话,才不会太大的影响速度,增加服务端的工作量。
可惜我没有相关的程序。
但我的思路是这样的:当你增加图片时,系统会进行检测,并生相应的文件夹来储存。这样也方便于以后的管理。 |
|
:(
出错
Warning: Cannot modify header information - headers already sent by (output started at C:\www\1.php:2) in C:\www\1.php on line 48 |
|
为何使用:
image.php?img=1.jpg
image.php?img=2.jpg
image.php?img=3.jpg
生成的都是同一个缩略图(即1.jpg) ? |
| jxxysong | 2004-7-29 04:30 AM |
|
[QUOTE][i]最初由 seaman4444 发布[/i]
[B]请问楼主,这种缩略图会出来大图缩小后失真的现象吗??
就是像素挤压在一起的那种感觉,可能说得不够专业,相信大家能懂吧..当图片很大时,比如800*600,如果生成400*300的缩略图就会出现失真,特别是人物照特别明显....
随便问一问,有没有好方法让生成的缩略图在图片大小缩小的同时,其像素也缩小而不至于失真.谢谢 [/B][/QUOTE]
既然说了是按比例的,你说还会有什么大的失真吗?
不过这个程序是要GD2支持。 |
| jxxysong | 2004-7-29 04:33 AM |
|
[QUOTE][i]最初由 xi9527 发布[/i]
[B]我认为还是直接生成小图片会好一点,因为这样的话,才不会太大的影响速度,增加服务端的工作量。
可惜我没有相关的程序。
但我的思路是这样的:当你增加图片时,系统会进行检测,并生相应的文件夹来储存。这样也方便于以后的管理。 [/B][/QUOTE]
这个程序就是生成小图片呀。
现在这个程序只是一个FLASH+PHP相集的一部分,我正在研究,如果有所得,我会公布出来的。
从实际来看,而且可以说是第一次运行FLASH前台的时候(相当于初始化哟),就会自动生成缩略图,以后再使用的时候就不用了。呵呵~~
[url]http://www.imagevuex.com/imagevue/[/url]
就是这个地址了,原来村子里有人发过的。 |
| jxxysong | 2004-7-29 04:34 AM |
|
[QUOTE][i]最初由 cotiy 发布[/i]
[B]:(
出错
Warning: Cannot modify header information - headers already sent by (output started at C:\www\1.php:2) in C:\www\1.php on line 48 [/B][/QUOTE]
你没有定义图片呀。 |
| jxxysong | 2004-7-29 04:44 AM |
|
[QUOTE][i]最初由 netorg 发布[/i]
[B]为何使用:
image.php?img=1.jpg
image.php?img=2.jpg
image.php?img=3.jpg
生成的都是同一个缩略图(即1.jpg) ? [/B][/QUOTE]
要完整路径的。 |
| challenger | 2004-7-29 05:22 AM |
|
image.php
<?php
if (!$max_width)
$max_width = 100;
if (!$max_height)
$max_height = 80;
$image=$_GET[image];
//
$size = GetImageSize($image);
//
$width = $size[0];
$height = $size[1];
$x_ratio = $max_width / $width;
$y_ratio = $max_height / $height;
if ( ($width <= $max_width) && ($height <= $max_height) ) {
$tn_width = $width;
$tn_height = $height;
}
else if (($x_ratio * $height) < $max_height) {
$tn_height = ceil($x_ratio * $height);
$tn_width = $max_width;
}
else {
$tn_width = ceil($y_ratio * $width);
$tn_height = $max_height;
}
switch ($size[2]) {
case 1: //图片类型,1是GIF图
$src = @ImageCreateFromGIF($image);
break;
case 2: //图片类型,2是JPG图
$src = @imagecreatefromjpeg($image);
break;
case 3: //图片类型,3是PNG图
$src = @ImageCreateFromPNG($image);
break;
}
$dst = ImageCreate($tn_width,$tn_height);
ImageCopyResized($dst, $src, 0, 0, 0, 0,
$tn_width,$tn_height,$width,$height);
header("Content-type: image/jpeg");
ImageJpeg($dst, null, -1);
ImageDestroy($src);
ImageDestroy($dst);
?>
调用
a.html
<a href="<?=$url?>" target="_blank"><IMG SRC="image.php?image=<?=$url?>"></a>
$url为图片目录 |
|
To: challenger
您的那个失真很利害。 我给您一张图片您试试,
缩略图出来就一团黄色。 |
| challenger | 2004-7-29 06:28 AM |
|
比例问题,你跳到80:60肯定没问题
其他办法,暂时我还没想到 |
| seaman4444 | 2004-7-29 07:55 AM |
|
[QUOTE][i]最初由 jxxysong 发布[/i]
[B]既然说了是按比例的,你说还会有什么大的失真吗?
不过这个程序是要GD2支持。 [/B][/QUOTE]
如果是按长宽比例缩小,当然会有失真.
如果是按图片大小和像素比缩小,就不会有失真.
我不知道你是按哪个缩小的..我一直在找缩小图片时没有失真的办法. |
|
| 这样生成的缩图效果不是很好乐。没有经过二象限插值运算。还是用ImageMagick里面的convert生成的缩图好。。而且程序效率也高。 |
| sunggsun | 2004-7-29 08:16 AM |
|
[QUOTE][i]最初由 q3boy 发布[/i]
[B]这样生成的缩图效果不是很好乐。没有经过二象限插值运算。还是用ImageMagick里面的convert生成的缩图好。。而且程序效率也高。 [/B][/QUOTE]
en,这是个好主意,我用pear里面的类调用ImageMagick生成的,原图和缩略图见附件
另外,精华区里面xx斑竹发的那个效果也非常好,看不出来失真。
好久不见q3了,跑哪里去了? |
| challenger | 2004-7-29 08:39 AM |
|
[QUOTE][i]最初由 q3boy 发布[/i]
[B]这样生成的缩图效果不是很好乐。没有经过二象限插值运算。还是用ImageMagick里面的convert生成的缩图好。。而且程序效率也高。 [/B][/QUOTE]
ImageMagick是什么,没找到这个东西饿,能给介绍以下吗
精华区里的那个例子,我试了一下也失真啊,就是用netorg哪个图片测试的 |
| challenger | 2004-7-29 08:51 AM |
|
to:sunggsun
能把你的代码共享一下吗? |
Powered by Discuz! Archiver 6.1.0
© 2001-2006 Comsenz Inc.
Processed in 0.007012 second(s), 2 queries |