If you have ever done that kind of portal site, you must know that a picture may be displayed in different places, with different sizes and proportions.
If you only use one picture, it will definitely be deformed and displayed. It is too wasteful to link the small picture to the large picture...Using thumbnails to process it is not perfect, because the proportions and sizes appearing in each place may be different, for example!!!!!! !!!!!!
Please see the picture above.
In this place, what is actually transferred is a list, but the sizes of the pictures are different, some are wide and some are narrow. What should you do when you encounter such a situation? If you use it directly The original address will definitely be deformed. It is unreliable to use thumbnails. This is automatically transferred. You have no idea what width and height a picture needs.
-------- -------------------------------------------------- -------------------------------------------------- ------
Let's get to the point:
I have always used a method, which is PHP automatic cropping...compared to the image address you have seen similar to /aaaa/abc_200_100.jpg or /aaaa /abc_200*100.jpg
My way is to convert the image address into an address similar to the one above where the image is needed, and then direct it to a handler through apache's rewrite. Generate an image based on the width and height and save it.
There are several advantages to this:
First, it is very flexible. Where there are pictures, you can control them as wide or as high as you want without deformation, and the program will always display the picture content. The most
Second, when the image is generated once, apache will not redirect to the program next time, because there is a judgment of !d !f in front of the rule, which means that the current file does not exist. It will go in the direction. Next time the picture exists, it will not appear again. It will be the real picture
The bad thing is that there may be more pictures generated and take up a larger space, but if it is It doesn’t matter if you have your own server. You can categorize and organize it.
OK Here is the code, let’s take discuz as an example
function crop_img($img, $width = 200, $height = 200) {
$img_info = parse_url($img);
/* External links directly return the image address */
if (!empty($img_info['host']) && $img_info['host'] != $_SERVER[' HTTP_HOST']) {
return $img; return $img; . $width . '_' . $height . substr($img, $pos);
$img_info = parse_url($img); /* External links directly return the image address */ if (!empty($img_info['host']) && $img_info['host'] != $_SERVER[ 'HTTP_HOST']) { . ' . $width . '_' . $height . substr($img, $pos); echo '
The above means that files that do not exist at the beginning of data/attachement/ are directed to image.php for processing, and the url is passed as a parameter The third part is the code in image.php
$url = $_GET['url'];
$src = './data/attachment/' . preg_replace('/_(d+)_(d+)/', '', $url);
$filename = './data/attachment/' . $url;
if (file_exists($filename)) {
ob_start();
header('Content-type:image/jpeg');
readfile($filename);
ob_flush();
flush();
} else {
if(!preg_match('/_(d+)_(d+)/', $url, $wh)){
defulat();
exit();
}
$width = $wh[1];
$height = $wh[2];
thumb(realpath($src), $width, $height, $filename, 'crop', '85');
}
function thumb($src, $width, $height, $filename, $mode = 'scale', $quality = '100') {
try {
$imageValue = getimagesize($src);
$sourceWidth = $imageValue[0]; //原图宽
$sourceHeight = $imageValue[1]; //原图高
$thumbWidth = $width; //缩略图宽
$thumbHeight = $height; //缩略图高
$_x = 0;
$_y = 0;
$w = $sourceWidth;
$h = $sourceHeight;
if ($mode == 'scale') {
if ($sourceWidth
$_x = floor(($thumbWidth - $sourceWidth) / 2);
$_y = floor(($thumbHeight - $sourceHeight) / 2);
$thumbWidth = $sourceWidth;
$thumbHeight = $sourceHeight;
} else {
if ($thumbHeight * $sourceWidth > $thumbWidth * $sourceHeight) {
$thumbHeight = floor($sourceHeight * $width / $sourceWidth);
$_y = floor(($height - $thumbHeight) / 2);
} else {
$thumbWidth = floor($sourceWidth * $height / $sourceHeight);
$_x = floor(($width - $thumbWidth) / 2);
}
}
} else if ($mode == 'crop') {
if ($sourceHeight
$thumbWidth = floor($thumbWidth * $sourceHeight / $thumbHeight);
$thumbHeight = $sourceHeight;
}
if ($sourceWidth
$thumbHeight = floor($thumbHeight * $sourceWidth / $thumbWidth);
$thumbWidth = $sourceWidth;
}
$ S1 = $ SourceWidth /$ Sourceheight; // Original ratio $ s2 = $ width /$ height; // New diagram ratio ($ s1 == $ s2) {}} else if if ($s1 > $s2) { //Full height $x = ($ax - $thumbWidth ) / 2; $x = 0; $ay = floor($sourceHeight * ($ thumbWidth / $sourceWidth)); //Simulate the original image proportional height } Case 1: $source = imagecreatefromgif($src); break; case 3: $source = imagecreatefrompng($src); break; default: defulat(); return; } header("Content-type: image/jpeg"); $thumb = imagecreatetruecolor($width, $height); 255)); imagecopyresampled($thumb, $source, 0, 0, $x, $y, $width, $height, $w, $h); // if ($_SERVER['HTTP_REFERER'] || false !== stripos($_SERVER['HTTP_REFERER'], 'http://' . $_SERVER['SERVER_NAME'])) { $thumb, $filename, $quality); $filename } } function defulat() { $default_img = realpath('media/images/nopic.jpg'); ob_start(); type header('Content-:image/jpeg') ; readfile($default_img); ob_flush(); flush();}
thumb function can control the cropping method, scale is proportional scaling, no cropping, the insufficient areas are filled with white, crop is cropping, if the required aspect ratio is greater than the original image aspect ratio, then the maximum display width is maintained , center and crop the upper and lower excess parts. If the aspect ratio is required to be smaller than the original image aspect ratio, then maintain the maximum height and center and crop the left and right excess parts. In short, on the premise of maintaining no deformation, reduce the image and retain the maximum The content of the picture. Haha, how awesome is this code? Try it and you will know. Of course, you need to support the rewrite function and GD2 support

php把负数转为正整数的方法:1、使用abs()函数将负数转为正数,使用intval()函数对正数取整,转为正整数,语法“intval(abs($number))”;2、利用“~”位运算符将负数取反加一,语法“~$number + 1”。

实现方法:1、使用“sleep(延迟秒数)”语句,可延迟执行函数若干秒;2、使用“time_nanosleep(延迟秒数,延迟纳秒数)”语句,可延迟执行函数若干秒和纳秒;3、使用“time_sleep_until(time()+7)”语句。

php除以100保留两位小数的方法:1、利用“/”运算符进行除法运算,语法“数值 / 100”;2、使用“number_format(除法结果, 2)”或“sprintf("%.2f",除法结果)”语句进行四舍五入的处理值,并保留两位小数。

判断方法:1、使用“strtotime("年-月-日")”语句将给定的年月日转换为时间戳格式;2、用“date("z",时间戳)+1”语句计算指定时间戳是一年的第几天。date()返回的天数是从0开始计算的,因此真实天数需要在此基础上加1。

php字符串有下标。在PHP中,下标不仅可以应用于数组和对象,还可应用于字符串,利用字符串的下标和中括号“[]”可以访问指定索引位置的字符,并对该字符进行读写,语法“字符串名[下标值]”;字符串的下标值(索引值)只能是整数类型,起始值为0。

方法:1、用“str_replace(" ","其他字符",$str)”语句,可将nbsp符替换为其他字符;2、用“preg_replace("/(\s|\ \;||\xc2\xa0)/","其他字符",$str)”语句。

php判断有没有小数点的方法:1、使用“strpos(数字字符串,'.')”语法,如果返回小数点在字符串中第一次出现的位置,则有小数点;2、使用“strrpos(数字字符串,'.')”语句,如果返回小数点在字符串中最后一次出现的位置,则有。

在php中,可以使用substr()函数来读取字符串后几个字符,只需要将该函数的第二个参数设置为负值,第三个参数省略即可;语法为“substr(字符串,-n)”,表示读取从字符串结尾处向前数第n个字符开始,直到字符串结尾的全部字符。


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

SAP NetWeaver Server Adapter for Eclipse
Integrate Eclipse with SAP NetWeaver application server.

EditPlus Chinese cracked version
Small size, syntax highlighting, does not support code prompt function

Dreamweaver Mac version
Visual web development tools

Notepad++7.3.1
Easy-to-use and free code editor

VSCode Windows 64-bit Download
A free and powerful IDE editor launched by Microsoft
