java 生成缩略图并返回字节数组_关于提取后台图片数据时自动生成缩略图程序...

该博客介绍了如何在PHP中使用Java生成缩略图并将其转换为字节数组。通过调用`thumbs.php`类文件,程序在获取后台图片数据时自动生成缩略图,适用于手机推荐等场景。博客中展示了代码示例,包括调用`makeThumb`函数生成不同尺寸的缩略图,并提供了错误处理和图像处理的相关函数。
摘要由CSDN通过智能技术生成

调用图片的页面:

require_once('thumbs.php');//调用缩略图的类文件

//3 手机推荐

$nestedRows= $Download->getDownotherList("0",

"2","(RECMDLEVEL='4' or RECMDLEVEL='5')AND SMALLPICSERVERNAME!=''

AND CATALOGID=DOWNLOAD_NODEID and FULLNODEID like

'%191%'","DOWNLOADID DESC");

$i = 0;

if(is_array($nestedRows)&&sizeof($nestedRows)>0)

{

foreach($nestedRows

as $rowmobiletj)

{

$tbxdownId = $rowmobiletj['DOWNLOADID'];

$HtmlUrl = $rowmobiletj['HTMLURL'];

$tbxdownTitles = $rowmobiletj['DOWNLOADTITLE'];

$tbxdownImages =

$rowmobiletj['SMALLPICSERVERNAME'];

$tbxaddtime = $rowmobiletj['ADDTIME'];

$tbxdownTitle = $Func->ShortWrite($tbxdownTitles,16);

$table["rowmobiletj"][$i]["tbxdownTitle"] = "

title='".$tbxdownTitles."'

target='_blank'>".$tbxdownTitle."

";

$table["rowmobiletj"][$i]["HtmlUrl"] = $HtmlUrl;

$table["rowmobiletj"][$i]["tbxdownTitles"] = $tbxdownTitles;

$srcFile =

"attach/download_smallpic/".date('Y',$tbxaddtime)."/".date('m',$tbxaddtime)."/".date('d',$tbxaddtime)."/".$tbxdownImages;

$image = explode('.',$tbxdownImages);

$dstFile

=

"attach/tmp/thumbs6_2_".$image[0].".jpg";//缩略图名称存放的位置

if(!file_exists($dstFile)){

makeThumb($srcFile,

$dstFile, "100px", "70px", $option=OP_TO_FILE,

$cutmode=CM_MIDDLE);//生成缩略图的方法

}

$table["rowmobiletj"][$i]["tbxUrl"] = $dstFile;

$i++;

}//end

foreach

}

?>

//引用的类'thumbs.php'

/**

* 可扩展的缩略图生成函数

* 在http://yodoo.com的论坛里可以获得最新版本(注册用户)

* 演示效果也请登录http://yodoo.com看看,该站所有的缩略图(jpg,png)都是使用该函数生成的

*

* 转载请保留完整信息

*

* @author Austin Chin http://yodoo.com

* @version $Revision: 1.7 $

*

*

* version

*

* + 表示增加的功能

* - 表示丢弃的功能

* C 表示修正的功能

* E 表示扩展了功能

*

* v1.5

* makeThumb($srcFile, $dstFile, $dstW, $dstH, $option=1)

*

* v1.6

* + 增加了剪切模式

* + $option 8: 宽度最佳缩放

* + $option 16: 高度最佳缩放

* makeThumb($srcFile, $dstFile, $dstW, $dstH, $option=1,

$cutmode=0, $startX=0,

* $startY=0)

*

* v1.7

* E 返回值改为数组,第一个元素是代码 0 表示正常,

其它位错误代码;第二个元素是错误描述。

* 错误代码:

* -1 源文件不存在。

* -2 不支持的图片输出函数

* -3 不支持的图片创建函数

* -4 HTTP头信息已经输出,无法向浏览器输出图片。

* -5 无法检测输出的图片类型

* + 增加函数 message2Image 可以把字符串输出成图片格式

*/

/**

* 可扩展的缩略图生成函数

*

* @param string $srcFile 源文件

* @param string $srcFile 目标文件

* @param int $dstW 目标图片的宽度(单位:像素)

* @param int $dstH 目标图片的高度(单位:像素)

* @param int $option 附加参数,可以相加使用,如1+2(或者

1|2)表示同时执行1和2的功能。

* 1: 默认,输出到指定文件 2: 图片内容输出到浏览器 4:

不保持图片比例

* 8:宽度最佳缩放 16:高度最佳缩放

* @param int $cutmode 剪切模式 0: 默认模式,剪切模式 1: 左或上

2: 中 3: 右或下

* @param int $startX 剪切的起始横坐标(像素)

* @param int $startY 剪切的起始纵坐标(像素)

* @return array return[0]=0: 正常; return[0] 为错误代码

return[1] string: 错误描述

*/

define(OP_TO_FILE,

1); //输出到指定文件

define(OP_OUTPUT,

2); //图片内容输出到浏览器

define(OP_NOT_KEEP_SCALE,

4); //不保持图片比例, 即使用拉伸

define(OP_BEST_RESIZE_WIDTH,

8); //宽度最佳缩放

define(OP_BEST_RESIZE_HEIGHT, 16); //高度最佳缩放

define(CM_DEFAULT, 0); // 默认模式

define(CM_LEFT_OR_TOP, 1); // 左或上

define(CM_MIDDLE, 2); // 中

define(CM_RIGHT_OR_BOTTOM, 3); // 右或下

$srcFile = $_GET['picurl'];

$id =

intval($_GET['id']);

$dstFile = "test.gif";

switch ($id) {

case

1:

makeThumb($srcFile, $dstFile, "86px", "63px", $option=OP_OUTPUT,

$cutmode=CM_MIDDLE);//flash、动漫推荐

break;

case

2:

makeThumb($srcFile, $dstFile, "90px", "70px", $option=OP_OUTPUT,

$cutmode=CM_MIDDLE);//桌面主题

case

3:

makeThumb($srcFile, $dstFile, "132px", "94px", $option=OP_OUTPUT,

$cutmode=CM_MIDDLE);//游戏推荐

break;

case

4:

makeThumb($srcFile, $dstFile, "137px", "96px", $option=OP_OUTPUT,

$cutmode=CM_MIDDLE);//今日推荐

case

5:

makeThumb($srcFile, $dstFile, "100px", "140px", $option=OP_OUTPUT,

$cutmode=CM_MIDDLE);//手机主题

break;

case

6:

makeThumb($srcFile, $dstFile, "100px", "70px", $option=OP_OUTPUT,

$cutmode=CM_MIDDLE);//java游戏

break;

}

function makeThumb($srcFile, $dstFile, $dstW, $dstH,

$option=OP_TO_FILE, $cutmode=CM_DEFAULT, $startX=0, $startY=0)

{

$img_type = array(1=>"gif", 2=>"jpeg", 3=>"png");

$type_idx = array("gif"=>1, "jpg"=>2, "jpeg"=>2,

"jpe"=>2, "png"=>3);

if

(!file_exists($srcFile)) {

return array(-1, "Source file not exists: $srcFile.");

}

$path_parts = @pathinfo($dstFile);

$ext =

strtolower ($path_parts["extension"]);

if

($ext == "") {

return array(-5, "Can't detect output image's type.");

}

$func_output = "image" . $img_type[$type_idx[$ext]];

if

(!function_exists ($func_output)) {

return array(-2, "Function not exists for

output:$func_output.");

}

$data =

@GetImageSize($srcFile);

$func_create = "imagecreatefrom" . $img_type[$data[2]];

if

(!function_exists ($func_create)) {

return array(-3, "Function not exists for

create:$func_create.");

}

$im =

@$func_create($srcFile);

$srcW =

@ImageSX($im);

$srcH =

@ImageSY($im);

$srcX =

0;

$srcY =

0;

$dstX =

0;

$dstY =

0;

if

($option & OP_BEST_RESIZE_WIDTH) {

$dstH = round($dstW * $srcH / $srcW);

}

if

($option & OP_BEST_RESIZE_HEIGHT) {

$dstW = round($dstH * $srcW / $srcH);

}

$fdstW

= $dstW;

$fdstH

= $dstH;

if

($cutmode != CM_DEFAULT) { // 剪切模式 1: 左或上 2: 中 3:

右或下

$srcW -= $startX;

$srcH -= $startY;

if ($srcW*$dstH > $srcH*$dstW) {

$testW = round($dstW * $srcH / $dstH);

$testH = $srcH;

} else {

$testH = round($dstH * $srcW / $dstW);

$testW = $srcW;

}

switch ($cutmode) {

case CM_LEFT_OR_TOP: $srcX = 0; $srcY = 0; break;

case CM_MIDDLE: $srcX = round(($srcW - $testW) / 2);

$srcY = round(($srcH - $testH) / 2); break;

case CM_RIGHT_OR_BOTTOM: $srcX = $srcW - $testW;

$srcY = $srcH - $testH;

}

$srcW = $testW;

$srcH = $testH;

$srcX += $startX;

$srcY += $startY;

} else

{ // 原始缩放

if (!($option & OP_NOT_KEEP_SCALE)) {

// 以下代码计算新大小,并保持图片比例

if ($srcW*$dstH>$srcH*$dstW) {

$fdstH=round($srcH*$dstW/$srcW);

$dstY=floor(($dstH-$fdstH)/2);

$fdstW=$dstW;

} else {

$fdstW=round($srcW*$dstH/$srcH);

$dstX=floor(($dstW-$fdstW)/2);

$fdstH=$dstH;

}

$dstX=($dstX<0)?0:$dstX;

$dstY=($dstX<0)?0:$dstY;

$dstX=($dstX>($dstW/2))?floor($dstW/2):$dstX;

$dstY=($dstY>($dstH/2))?floor($dstH/s):$dstY;

}

} ///

end if ($cutmode != CM_DEFAULT) { // 剪切模式

if(

function_exists("imagecopyresampled") and

function_exists("imagecreatetruecolor") ){

$func_create = "imagecreatetruecolor";

$func_resize = "imagecopyresampled";

} else

{

$func_create = "imagecreate";

$func_resize = "imagecopyresized";

}

$newim

= @$func_create($dstW,$dstH);

$black

= @ImageColorAllocate($newim, 0,0,0);

$back =

@imagecolortransparent($newim, $black);

@imagefilledrectangle($newim,0,0,$dstW,$dstH,$black);

@$func_resize($newim,$im,$dstX,$dstY,$srcX,$srcY,$fdstW,$fdstH,$srcW,$srcH);

if

($option & OP_TO_FILE) {

@$func_output($newim,$dstFile);

}

if

($option & OP_OUTPUT) {

if (function_exists("headers_sent")) {

if (headers_sent()) {

return array(-4, "HTTP already sent, can't output image to

browser.");

}

}

header("Content-type: image/" . $img_type[$type_idx[$ext]]);

@$func_output($newim);

}

@imagedestroy($im);

@imagedestroy($newim);

return

array(0, "OK");

}

?>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值