喜悦国际村 » 代码共享 » 按比例生成缩略图

页: [1] 2
jxxysong2004-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]

duketang2004-7-28 06:07 PM
实用的东西我顶~
带个正则问题
[url]http://www.phpx.com/happy/thr75443.html[/url]

seaman44442004-7-29 12:45 AM
请问楼主,这种缩略图会出来大图缩小后失真的现象吗??
就是像素挤压在一起的那种感觉,可能说得不够专业,相信大家能懂吧..当图片很大时,比如800*600,如果生成400*300的缩略图就会出现失真,特别是人物照特别明显....

随便问一问,有没有好方法让生成的缩略图在图片大小缩小的同时,其像素也缩小而不至于失真.谢谢

xi95272004-7-29 01:29 AM
我认为还是直接生成小图片会好一点,因为这样的话,才不会太大的影响速度,增加服务端的工作量。
可惜我没有相关的程序。
但我的思路是这样的:当你增加图片时,系统会进行检测,并生相应的文件夹来储存。这样也方便于以后的管理。

cotiy2004-7-29 01:43 AM
:(
出错
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

netorg2004-7-29 02:24 AM
为何使用:
image.php?img=1.jpg
image.php?img=2.jpg
image.php?img=3.jpg
生成的都是同一个缩略图(即1.jpg) ?

jxxysong2004-7-29 04:30 AM
[QUOTE][i]最初由 seaman4444 发布[/i]
[B]请问楼主,这种缩略图会出来大图缩小后失真的现象吗??
就是像素挤压在一起的那种感觉,可能说得不够专业,相信大家能懂吧..当图片很大时,比如800*600,如果生成400*300的缩略图就会出现失真,特别是人物照特别明显....

随便问一问,有没有好方法让生成的缩略图在图片大小缩小的同时,其像素也缩小而不至于失真.谢谢 [/B][/QUOTE]

既然说了是按比例的,你说还会有什么大的失真吗?
不过这个程序是要GD2支持。

jxxysong2004-7-29 04:33 AM
[QUOTE][i]最初由 xi9527 发布[/i]
[B]我认为还是直接生成小图片会好一点,因为这样的话,才不会太大的影响速度,增加服务端的工作量。
可惜我没有相关的程序。
但我的思路是这样的:当你增加图片时,系统会进行检测,并生相应的文件夹来储存。这样也方便于以后的管理。 [/B][/QUOTE]

这个程序就是生成小图片呀。

现在这个程序只是一个FLASH+PHP相集的一部分,我正在研究,如果有所得,我会公布出来的。

从实际来看,而且可以说是第一次运行FLASH前台的时候(相当于初始化哟),就会自动生成缩略图,以后再使用的时候就不用了。呵呵~~

[url]http://www.imagevuex.com/imagevue/[/url]

就是这个地址了,原来村子里有人发过的。

jxxysong2004-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]

你没有定义图片呀。

jxxysong2004-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]


要完整路径的。

challenger2004-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为图片目录

netorg2004-7-29 05:57 AM
To: challenger

您的那个失真很利害。 我给您一张图片您试试,
缩略图出来就一团黄色。

netorg2004-7-29 05:59 AM
缩出来的结果是:

challenger2004-7-29 06:28 AM
比例问题,你跳到80:60肯定没问题

其他办法,暂时我还没想到

seaman44442004-7-29 07:55 AM
[QUOTE][i]最初由 jxxysong 发布[/i]
[B]既然说了是按比例的,你说还会有什么大的失真吗?
不过这个程序是要GD2支持。 [/B][/QUOTE]

如果是按长宽比例缩小,当然会有失真.
如果是按图片大小和像素比缩小,就不会有失真.

我不知道你是按哪个缩小的..我一直在找缩小图片时没有失真的办法.

q3boy2004-7-29 08:10 AM
这样生成的缩图效果不是很好乐。没有经过二象限插值运算。还是用ImageMagick里面的convert生成的缩图好。。而且程序效率也高。

sunggsun2004-7-29 08:16 AM
[QUOTE][i]最初由 q3boy 发布[/i]
[B]这样生成的缩图效果不是很好乐。没有经过二象限插值运算。还是用ImageMagick里面的convert生成的缩图好。。而且程序效率也高。 [/B][/QUOTE]

en,这是个好主意,我用pear里面的类调用ImageMagick生成的,原图和缩略图见附件

另外,精华区里面xx斑竹发的那个效果也非常好,看不出来失真。

好久不见q3了,跑哪里去了?

q3boy2004-7-29 08:22 AM
呵呵。。最近懒散乐。。现在回归。

challenger2004-7-29 08:39 AM
[QUOTE][i]最初由 q3boy 发布[/i]
[B]这样生成的缩图效果不是很好乐。没有经过二象限插值运算。还是用ImageMagick里面的convert生成的缩图好。。而且程序效率也高。 [/B][/QUOTE]
ImageMagick是什么,没找到这个东西饿,能给介绍以下吗


精华区里的那个例子,我试了一下也失真啊,就是用netorg哪个图片测试的

challenger2004-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