検索
ホームページphp教程php手册高品質なサムネイル生成機能(複数のトリミングモード、高さ・幅による最適なスケーリングなど)

機能|サムネイル

/**

* 拡張可能なサムネイル生成機能

* 最新版(登録ユーザー)は http://yodoo.com のフォーラムで入手できます

* デモ効果を確認するには http://yodoo.com にログインしてくださいこのサイトのすべてのサムネイル (jpg、png) はこの機能を使用して生成されています

*

* 転載する場合は完全な情報を保管してください

*

* @author Austin Chin :/ /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、つまり通常を意味します、その他のビット エラー コード。2 番目の要素はエラーの説明です。

* エラーコード:

* -1 ソースファイルが存在しません。

* -2 未サポートの画像出力機能

* -3 未サポートの画像作成機能

* -4 HTTPヘッダー情報が出力されており、ブラウザに画像を出力できません。

* -5 出力画像タイプを検出できません

* + 文字列を画像形式に出力する関数 message2Image を追加します

*/





/**

* 拡張可能なサムネイル生成関数

*

* @param string $srcFile ソースファイル

* @param string $srcFile target file

* @param int $dstW 対象画像の幅(単位:ピクセル)

* @param int $dstH 対象画像の高さ (単位: ピクセル)

* @param int $option 追加で使用できる追加パラメータ。1+2 (または 1|2) は 1 と 2 を実行することを意味します。 2台同時機能。

* 1: デフォルト、指定されたファイルに出力します 2: 画像コンテンツをブラウザに出力します 4: 画像比率を維持しません

* 8: 幅に最適なスケーリング 16: 高さに最適なスケーリング

* @param int $cutmode カットモード 0: デフォルトモード、カットモード 1: 左または上 2: 中央 3: 右または下

* @param int $startX カットの開始横座標 (ピクセル)

* @param int $startY カットの開始垂直座標 (ピクセル)

* @return 配列 return[0]=0: 通常; return[0] はエラーコード return[1] 文字列: エラーの説明

*/

define(OP_TO_FILE, 1) //指定されたファイルに出力

define(OP_OUTPUT, 2); content ブラウザへの出力

define(OP_NOT_KEEP_SCALE, 4); //画像の比率を維持しない、つまりストレッチを使用します

define(OP_BEST_RESIZE_WIDTH, 8) //幅の最適なスケーリング

define(OP_BEST_RESIZE_HEIGHT, 16) ); // 高さの最適なスケーリング



define(CM_DEFAULT, 0); // in

define(CM_RIGHT_OR_BOTTOM , 3);



関数 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, "ソース ファイルが存在しません: $srcFile.");

}



$path_parts = @pathinfo($dstFile);

$ext = strto lower ($path_parts["extension"]);

if ($ext == "") {

return array(-5, "できません出力画像のタイプを検出します。");

}

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

if (!function_exists ($func_output)) {

return array(-2) , "出力用の関数が存在しません: $func_output.");

}



$data = @GetImageSize ($srcFile);

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

if (!function_exists ($func_create)) {

return array(-3, "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 ($s rcW*$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
$dstY=($dstX
            $dstX=($dstX>($dstW/2))?フロア($dstW/2):$dstX;

$dstY=($dstY>($dstH/2))?フロア($dstH/s) :$dstY;

}

} /// end if ($cutmode != CM_DEFAULT) { // 剪切モード



if( function_exists("imagecopyresampled") and

function_exists("imageトゥルーカラーの作成") ) {

$func_create = "imagecreatetruecolor";

$func_resize = "imagecopyresampled";

} else {

$func_create = "imagecreate";

$func _resize = "imagecopyresize";

}



$ 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 はすでに送信されているため、ブラウザに画像を出力できません。");

}

}

ヘッダー( "コンテンツ タイプ: image/" 。 $img_type[$type_idx[$ext]]);

@$func_output($newim);

}



@imagedestroy($im);

@imagedestroy($newim);



戻るarray(0, "OK");

}



声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい