- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章PHP生成自适应大小的缩略图类及使用方法分享由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
把下面的代码直接复制,新建一个文件叫做 thumbnailimage.php ,文件名最好不要用大写,把以下代码复制进去:
。
<?php 。
。
define ( 'MAX_IMG_SIZE', 100000 ),
// Supported image types define ( 'THUMB_JPEG', 'image/jpeg' ); define ( 'THUMB_PNG', 'image/png' ); define ( 'THUMB_GIF', 'image/gif' ),
// Interlacing modes define ( 'INTERLACE_OFF', 0 ); define ( 'INTERLACE_ON', 1 ),
// Output modes define ( 'STDOUT', '' ),
// Empty constants define ( 'NO_LOGO', '' ); define ( 'NO_LABEL', '' ),
// Logo and label positioning define ( 'POS_LEFT', 0 ); define ( 'POS_RIGHT', 1 ); define ( 'POS_CENTER', 2 ); define ( 'POS_TOP', 3 ); define ( 'POS_BOTTOM', 4 ),
// Error messages define ( 'E_001', 'File <b>%s</b> do not exist' ); define ( 'E_002', 'Failed reading image data from <b>%s</b>' ); define ( 'E_003', 'Cannot create the copy of <b>%s</b>' ); define ( 'E_004', 'Cannot copy the logo image' ); define ( 'E_005', 'Cannot create final image' ),
// **************************************************************************** // CLASS DEFINITION // **************************************************************************** 。
class ThumbnailImage { 。
// **************************************************************************** // PUBLIC PROPERTIES // **************************************************************************** 。
var $src_file; // source image file var $dest_file; // destination image file var $dest_type; // destination image type 。
var $interlace; // destination image interlacing mode var $jpeg_quality; // quality of resulting JPEG 。
var $max_width; // maximal thumbnail width var $max_height; // maximal thumbnail height var $fit_to_max; // enlarge small images?
var $logo; // array of logo parameters var $label; // array of label parameters 。
// **************************************************************************** // CLASS CONSTRUCTOR // **************************************************************************** 。
/* Description: Defines default values for properties. Prototype: void ThumbImg ( string src_file = '' ) Parameters: src_file - source image filename */ function ThumbnailImage ( $src_file = '' ) { 。
$this->src_file = $src_file; $this->dest_file = STDOUT; $this->dest_type = THUMB_JPEG,
$this->interlace = INTERLACE_OFF; $this->jpeg_quality = -1,
$this->max_width = 100; $this->max_height = 90; $this->fit_to_max = FALSE,
$this->logo['file'] = NO_LOGO; $this->logo['vert_pos'] = POS_TOP; $this->logo['horz_pos'] = POS_LEFT,
$this->label['text'] = NO_LABEL; $this->label['vert_pos'] = POS_BOTTOM; $this->label['horz_pos'] = POS_RIGHT; $this->label['font'] = ''; $this->label['size'] = 20; $this->label['color'] = '#000000'; $this->label['angle'] = 0,
} 。
// **************************************************************************** // PRIVATE METHODS // **************************************************************************** 。
/* Description: Extracts decimal color components from hex color string. Prototype: array ParseColor ( string hex_color ) Parameters: hex_color - color in '#rrggbb' format Return: Decimal values for red, green and blue color components. */ function ParseColor ( $hex_color ) { 。
if ( strpos ( $hex_color, '#' ) === 0 ) $hex_color = substr ( $hex_color, 1 ),
$r = hexdec ( substr ( $hex_color, 0, 2 ) ); $g = hexdec ( substr ( $hex_color, 2, 2 ) ); $b = hexdec ( substr ( $hex_color, 4, 2 ) ),
return array ( $r, $g, $b ),
} 。
/* Description: Retrives image data as a string. Thanks to Luis Larrateguy for the idea of this function. Prototype: string GetImageStr ( string image_file ) Parameters: image_file - filename of image Return: Image file contents string. */ function GetImageStr ( $image_file ) { 。
if ( function_exists ( 'file_get_contents' ) ) { $str = @file_get_contents ( $image_file ); if ( ! $str ) { $err = sprintf( E_002, $image_file ); trigger_error( $err, E_USER_ERROR ); } return $str; } 。
$f = fopen ( $image_file, 'rb' ); if ( ! $f ) { $err = sprintf( E_002, $image_file ); trigger_error( $err, E_USER_ERROR ); } $fsz = @filesize ( $image_file ); if ( ! $fsz ) $fsz = MAX_IMG_SIZE; $str = fread ( $f, $fsz ); fclose ( $f ),
return $str,
} 。
/* Description: Loads image from file. Prototype: resource LoadImage ( string image_file, int &image_width, int &image_height ) Parameters: image_file - filename of image image_width - width of loaded image image_height - height of loaded image Return: Image identifier representing the image obtained from the given file. */ function LoadImage ( $image_file, &$image_width, &$image_height ) { 。
$image_width = 0; $image_height = 0,
$image_data = $this->GetImageStr( $image_file ),
$image = imagecreatefromstring ( $image_data ); if ( ! $image ) { $err = sprintf( E_003, $image_file ); trigger_error( $err, E_USER_ERROR ); } 。
$image_width = imagesx ( $image ); $image_height = imagesy ( $image ),
return $image,
} 。
/* Description: Calculates thumbnail image sizes from source image width and height. Prototype: array GetThumbSize ( int src_width, int src_height ) Parameters: src_width - width of source image src_height - height of source image Return: An array with 2 elements. Index 0 contains the width of thumbnail image and index 1 contains the height. */ function GetThumbSize ( $src_width, $src_height ) { 。
$max_width = $this->max_width; $max_height = $this->max_height,
$x_ratio = $max_width / $src_width; $y_ratio = $max_height / $src_height,
$is_small = ( $src_width <= $max_width && $src_height <= $max_height ),
if ( ! $this->fit_to_max && $is_small ) { $dest_width = $src_width; $dest_height = $src_height; } elseif ( $x_ratio * $src_height < $max_height ) { $dest_width = $max_width; $dest_height = ceil ( $x_ratio * $src_height ); } else { $dest_width = ceil ( $y_ratio * $src_width ); $dest_height = $max_height; } 。
return array ( $dest_width, $dest_height ),
} 。
/* Description: Adds logo image to thumbnail. Prototype: void AddLogo ( int thumb_width, int thumb_height, resource &thumb_img ) Parameters: thumb_width - width of thumbnail image thumb_height - height of thumbnail image thumb_img - thumbnail image identifier */ function AddLogo ( $thumb_width, $thumb_height, &$thumb_img ) { 。
extract ( $this->logo ),
$logo_image = $this->LoadImage ( $file, $logo_width, $logo_height ),
if ( $vert_pos == POS_CENTER ) $y_pos = ceil ( $thumb_height / 2 - $logo_height / 2 ); elseif ($vert_pos == POS_BOTTOM) $y_pos = $thumb_height - $logo_height; else $y_pos = 0,
if ( $horz_pos == POS_CENTER ) $x_pos = ceil ( $thumb_width / 2 - $logo_width / 2 ); elseif ( $horz_pos == POS_RIGHT ) $x_pos = $thumb_width - $logo_width; else $x_pos = 0,
if ( ! imagecopy ( $thumb_img, $logo_image, $x_pos, $y_pos, 0, 0, $logo_width, $logo_height ) ) trigger_error( E_004, E_USER_ERROR ),
} 。
/* Description: Adds label text to thumbnail. Prototype: void AddLabel ( int thumb_width, int thumb_height, resource &thumb_img ) Parameters: thumb_width - width of thumbnail image thumb_height - height of thumbnail image thumb_img - thumbnail image identifier */ function AddLabel ( $thumb_width, $thumb_height, &$thumb_img ) { 。
extract ( $this->label ),
list( $r, $g, $b ) = $this->ParseColor ( $color ); $color_id = imagecolorallocate ( $thumb_img, $r, $g, $b ),
$text_box = imagettfbbox ( $size, $angle, $font, $text ); $text_width = $text_box [ 2 ] - $text_box [ 0 ]; $text_height = abs ( $text_box [ 1 ] - $text_box [ 7 ] ),
if ( $vert_pos == POS_TOP ) $y_pos = 5 + $text_height; elseif ( $vert_pos == POS_CENTER ) $y_pos = ceil( $thumb_height / 2 - $text_height / 2 ); elseif ( $vert_pos == POS_BOTTOM ) $y_pos = $thumb_height - $text_height,
if ( $horz_pos == POS_LEFT ) $x_pos = 5; elseif ( $horz_pos == POS_CENTER ) $x_pos = ceil( $thumb_width / 2 - $text_width / 2 ); elseif ( $horz_pos == POS_RIGHT ) $x_pos = $thumb_width - $text_width -5,
imagettftext ( $thumb_img, $size, $angle, $x_pos, $y_pos, $color_id, $font, $text ),
} 。
/* Description: Output thumbnail image into the browser. Prototype: void OutputThumbImage ( resource dest_image ) Parameters: dest_img - thumbnail image identifier */ function OutputThumbImage ( $dest_image ) { 。
imageinterlace ( $dest_image, $this->interlace ),
header ( 'Content-type: ' . $this->dest_type ),
if ( $this->dest_type == THUMB_JPEG ) imagejpeg ( $dest_image, '', $this->jpeg_quality ); elseif ( $this->dest_type == THUMB_GIF ) imagegif($dest_image); elseif ( $this->dest_type == THUMB_PNG ) imagepng ( $dest_image ),
} 。
/* Description: Save thumbnail image into the disc file. Prototype: void SaveThumbImage ( string image_file, resource dest_image ) Parameters: image_file - destination file name dest_img - thumbnail image identifier */ function SaveThumbImage ( $image_file, $dest_image ) { 。
imageinterlace ( $dest_image, $this->interlace ),
if ( $this->dest_type == THUMB_JPEG ) imagejpeg ( $dest_image, $this->dest_file, $this->jpeg_quality ); elseif ( $this->dest_type == THUMB_GIF ) imagegif ( $dest_image, $this->dest_file ); elseif ( $this->dest_type == THUMB_PNG ) imagepng ( $dest_image, $this->dest_file ),
} 。
// **************************************************************************** // PUBLIC METHODS // **************************************************************************** 。
/* Description: Output thumbnail image into the browser or disc file according to the values of parameters. Prototype: void Output ( ) */ function Output() { 。
$src_image = $this->LoadImage($this->src_file, $src_width, $src_height),
$dest_size = $this->GetThumbSize($src_width, $src_height),
$dest_width=$dest_size[0]; $dest_height=$dest_size[1],
$dest_image=imagecreatetruecolor($dest_width, $dest_height); if (!$dest_image) trigger_error(E_005, E_USER_ERROR),
imagecopyresampled( $dest_image, $src_image, 0, 0, 0, 0, $dest_width, $dest_height, $src_width, $src_height ),
if ($this->logo['file'] != NO_LOGO) $this->AddLogo($dest_width, $dest_height, $dest_image),
if ($this->label['text'] != NO_LABEL) $this->AddLabel($dest_width, $dest_height, $dest_image),
if ($this->dest_file == STDOUT) $this->OutputThumbImage ( $dest_image ); else $this->SaveThumbImage ( $this->dest_file, $dest_image ),
imagedestroy ( $src_image ); imagedestroy ( $dest_image ),
} 。
} // End of class definition 。
?> 。
使用方法: 1、首先引用该php文件(不要告诉我不会) 2、调用代码 。
$tis = new ThumbnailImage(); $tis->src_file = "这里写源文件的路径" $tis->dest_type = THUMB_JPEG;//生成图片的类型是 jpg $tis->dest_file = '这里写目标文件的路径',
。
$tis->max_width = 120;//自适应大小,但是最大宽度为120 $tis->max_height = 4000; //自适应大小,但是最大高度为4000 $tis->Output(),
。
代码关键在于 max_width 和max_height,填多少,就会帮你生成一个 差不多大小的文件,一般来说除非你的图片很有个性,譬如很长,否则缩略图生成的还是很体贴的.
最后此篇关于PHP生成自适应大小的缩略图类及使用方法分享的文章就讲到这里了,如果你想了解更多关于PHP生成自适应大小的缩略图类及使用方法分享的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我不知道如何创建这样的元素,以便点之间的距离始终适应屏幕尺寸。 这是我的代码的结果: .line-list { display: flex; justify-content: space-be
最终用户的 paypal 自适应支付流程有点奇怪。 而不是像 paypal express 流程那样工作: 用户完成结帐过程 用户前往 paypal 以授权付款 用户被重定向回网站以确认付款 通知从网
我在我们的游戏网站上添加了一个响应式 Google 广告,这是一个简单的基于静态 bootstrap 的网站: http://dealoround.com这将解决 https://mrcsabatot
简短的问题 使用 routes.resetConfig(newRouteArray) 切换路线的/或更好的方法有什么区别? 对比 在 resize 事件上重新加载 Angular 应用程序并根据屏幕宽
我在尝试仅使用纯 JS 制作自适应 slider 时遇到一些问题。 任务是: 在移动设备中, slider 仅显示文本信息或大幻灯片的一小部分 当宽度增加(通过媒体查询)时, slider 会变大并显
我刚刚创建了一个表单类类型,它有一个选择类型,其中 choice_list 必须根据登录的用户角色进行更改,因此表单类类型需要访问当前用户角色,然后根据它更改 choice_list。 有人能指出一种
我刚刚创建了一个表单类类型,它有一个选择类型,其中 choice_list 必须根据登录的用户角色进行更改,因此表单类类型需要访问当前用户角色,然后根据它更改 choice_list。 有人能指出一种
引入自适应 Autosar 的主要动机是什么? Information provided by Autosar consortium is "AP provides mainly high-perfo
我是 Collection View 和自动布局的新手,我在让单元格大小适应模拟器中的各种设备时遇到了问题。我正在使用流式布局,并在尺寸检查器中设置尺寸。我提供的图像显示了我需要单元格在所有设备上的外
我在使用自适应布局的网站上工作,这意味着网站会适应用户屏幕宽度。有三张图片说明了我的想法,图片显示了浏览器窗口从宽到窄调整大小的三个步骤。 宽屏紫色区域贴在页面左侧,绿色区域适合屏幕的其余部分。 中等
目前我在 flexbox 中有三列(目前在 Plunkr 中的情况)。 当屏幕变小时,我希望第二列位于其他两列之上(Plunkr 中的理想情况)。 我在 https://plnkr.co/edit/Z
我试图让 svg 根据屏幕尺寸显示不同的图像,因此较小的设备显示较小的图像。例如,如果我想要一个覆盖整个 svg 区域的背景图像,就像这样: #t
这是我们的 jQuery 代码: $(document).ready(function(){ $(window).on("load resize", function(){ i
我正在尝试使用 this gem 用于使用 paypal 自适应支付,它需要 development: environment: "sandbox" username: "sandbox_userna
首先,我对 paypal 自适应支付有点陌生,直到现在我只使用 REST api。 在实现自适应支付时,我无法理解应用程序的完整流程。 在 REST api 中,我将用户导航到他付款的 paypal
我有一个具有聊天功能的应用程序,其中 UITextview 用于输入消息。 UITextview 高度必须是动态的(如果用户输入消息,高度必须根据文本长度更改,直到特定高度)。 我怎样才能做到这一点?
我有一个表设置了一个自动递增的 ID。假设我有 ID 1、2、3、4 和 5。当我删除 ID 号 3 时,我希望 ID 4 降为 3,ID 5 降为 4。 这可能吗?这是怎么做到的? 最佳答案 我想你
我有一个幻灯片,其中包含许多不同纵横比的图片。我希望图像在幻灯片中居中。我该怎么做,或者更好的是,我如何自动调整 slider 的大小? 最佳答案 解决中心问题 .bx-wrapper img {
我有一个想要实现的特定布局,但我不知道如何让它在多种屏幕尺寸上稳健地工作。 关键思想是 TextViews 中的信息很重要,而 ImageView 是装饰性的。我希望根据用户屏幕尺寸(最大尺寸)调整
我在响应式网站 ( http://goo.gl/asEovC ) 上运行了来自 labnol.org 的代码: ad = document.getElementById('google-a
我是一名优秀的程序员,十分优秀!