cncml手绘网
标题:
PHP一般情况下生成的缩略图都比较不理想
[打印本页]
作者:
admin
时间:
2018-7-7 23:52
标题:
PHP一般情况下生成的缩略图都比较不理想
PHP用GD库生成高质量的缩略图片,PHP一般情况下生成的缩略图都比较不理想。今天试用PHP,GD库来生成缩略图。虽然并不100%完美。可是也应该可以满足缩略图的要求了。
<?php
8 v& l ~: q8 I6 @' k
$FILENAME="image.thumb";
' I! N: ?8 S4 B5 N2 M& h
// 生成图片的宽度
: c! f8 w7 E, d/ v4 P7 v+ D
$RESIZEWIDTH=400;
y/ }4 s8 q4 f4 f% Y/ |- G, n
// 生成图片的高度
. d9 Q& S$ R' q
$RESIZEHEIGHT=400;
* u' ~5 t$ ?" C6 p/ Y# ?
. J( T8 D6 s0 g0 B" G' ?$ }" h
function ResizeImage($im,$maxwidth,$maxheight,$name){
+ t! m5 s" T2 Y! j3 V; m
$width = imagesx($im);
: b- n. b5 r" z/ X
$height = imagesy($im);
4 b4 ^7 h* u+ |$ O) ^& r9 q6 {- ^
if(($maxwidth && $width > $maxwidth) || ($maxheight && $height > $maxheight)){
$ X8 H7 v' @) [( o
if($maxwidth && $width > $maxwidth){
" L+ u) f+ V- k6 d. C
$widthratio = $maxwidth/$width;
" \9 ~ w) [ Z- s% n
$RESIZEWIDTH=true;
# x$ g, k# r2 B" v1 z9 {( Q
}
- m) K" ~1 F0 w! u
if($maxheight && $height > $maxheight){
5 s+ J( t _/ D1 k: `/ ~
$heightratio = $maxheight/$height;
- |& |* w3 @+ X+ b) Y
$RESIZEHEIGHT=true;
1 z% u1 U& R) {# C' j& M) a2 S
}
' {0 G- g; s( t: M# y1 a
if($RESIZEWIDTH && $RESIZEHEIGHT){
) Q. X `/ O4 K. @) T: A$ z
if($widthratio < $heightratio){
9 Y7 i& h" g4 N- u
$ratio = $widthratio;
* t/ E/ N/ U0 n1 z/ `4 J
}else{
\" Q( T' _$ g" _7 I: O
$ratio = $heightratio;
1 m, ]5 U# n" O9 m
}
7 [2 {4 |0 K2 p. y1 B
}elseif($RESIZEWIDTH){
2 }* F+ M ^3 n& J% _) l
$ratio = $widthratio;
6 B. ?4 q' k" C9 a' _* L3 i+ Y
}elseif($RESIZEHEIGHT){
9 S7 O7 @$ J2 a& f% ?( ~2 o
$ratio = $heightratio;
; \1 {% v' |5 {0 K1 c
}
6 k( a( _& R; C: a
$newwidth = $width * $ratio;
" q; K$ b2 } R+ v7 p: b$ G
$newheight = $height * $ratio;
6 [+ { j) p- O
if(function_exists("imagecopyresampled")){
& n/ d4 c p, O7 Q C
$newim = imagecreatetruecolor($newwidth, $newheight);
* Z0 l" j6 A( O6 q; Z, X
imagecopyresampled($newim, $im, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
) }" p' v" T4 _9 M/ ?
}else{
) x( M+ `) [3 i6 E8 n! d5 l
$newim = imagecreate($newwidth, $newheight);
# n# g+ ^0 _9 I
imagecopyresized($newim, $im, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
2 l! c# X+ q' |/ D; e
}
+ n% B3 i1 T$ T9 }1 h% ^
ImageJpeg ($newim,$name . ".jpg");
' i/ S6 l4 m; _5 V/ O5 r
ImageDestroy ($newim);
. Z8 V+ P c7 _3 Z
}else{
1 \& A7 W: `& f5 K
ImageJpeg ($im,$name . ".jpg");
* ^7 T3 a, l) m+ Q$ i- r
}
; |/ o7 C$ F7 l2 g( Z
}
' ?" ^& o/ ^9 W' w
2 X* @7 l1 {- n b7 b
if($_FILES['image']['size']){
- l/ w# L% e* m3 K
if($_FILES['image']['type'] == "image/pjpeg"){
% Z2 ]9 f/ k9 |3 b% h; R, }1 C
$im = imagecreatefromjpeg($_FILES['image']['tmp_name']);
8 S! I' t8 {' O1 N1 U L5 B
}elseif($_FILES['image']['type'] == "image/x-png"){
; N4 E, H q$ m0 M% c0 Y: x
$im = imagecreatefrompng($_FILES['image']['tmp_name']);
7 _; C" \! s7 g% \
}elseif($_FILES['image']['type'] == "image/gif"){
3 L4 K" S9 z+ J8 S; O- W: {. n4 O
$im = imagecreatefromgif($_FILES['image']['tmp_name']);
1 n: y- x r# X: |% S+ R: N
} 2881064151
+ W; M8 o# X. h9 r2 y( _( Z
if($im){
5 i3 }+ l* c0 O u% T0 m
if(file_exists("$FILENAME.jpg")){
; G& }; m2 a$ T' d
unlink("$FILENAME.jpg");
, e" f- g- H" D
}
' C( U' \! r- a/ M: L+ I
ResizeImage($im,$RESIZEWIDTH,$RESIZEHEIGHT,$FILENAME);
0 S c& \7 ?( k* [
ImageDestroy ($im);
& ]2 T7 u) H. R$ u
}
% \6 O0 `9 e! r y. Y9 X6 C# {3 B
}
. x7 m+ s# Z. j7 X0 P6 E
?>
复制代码
以下是测试代码(demo.php)
1 y7 a& B) i6 E+ v5 y4 N( O& [/ U) Y
' t: _* H2 c. O1 V
代码如下:
9 A; z; E% {& R! s2 X7 ]
. t5 m3 G) G# F' X! w$ H: T
<?php
0 ?* J! B# l% o7 k
include('ResizeImage.php');
8 }8 j+ L0 [) U
if(!empty($_POST)){
! Y5 f/ K$ a7 Q! r. @- \2 r1 [; i
echo($FILENAME.".jpg?cache=".rand(0,999999));
! {, r! t$ y6 Z5 a! t
}
2 I3 P8 x: p2 Z" I" o6 \/ t
?>
1 v8 Q, i) E$ E8 V8 Q4 j( E
<form name="test" action="?submit=true" enctype="multipart/form-data" method="post" >
( @1 e& F' q1 N5 n4 ~2 U) ^
<input type="file" name="image" size="50" value="浏览"><p>
5 e u' T; Z8 J4 G# `0 v( \
<input type="submit" value="上传图片">
& E2 x' X4 R2 W3 ?1 J
</form>
复制代码
4 R, F+ ?2 R8 O- P. P0 C- ^& f
2 X1 p I( y: C' I) P5 P
欢迎光临 cncml手绘网 (http://www.cncml.com/)
Powered by Discuz! X3.2