provide a generalised interface for thumbnail generators to support various content types

This commit is contained in:
zotlabs 2017-11-20 14:48:29 -08:00
parent 250d947667
commit 56d981c8ef
2 changed files with 74 additions and 35 deletions

View File

@ -18,45 +18,35 @@ class Thumbnail {
return; return;
$preview_style = intval(get_config('system','thumbnail_security',0)); $preview_style = intval(get_config('system','thumbnail_security',0));
$preview_width = intval(get_config('system','thumbnail_width',300));
$preview_height = intval(get_config('system','thumbnail_height',300));
$attach = $c[0]; $attach = $c[0];
$isize = 300; $default_controller = null;
if(strpos($attach['filetype'],'text/') !== false) { $files = glob('Zotlabs/Thumbs/*.php');
$stream = @fopen($attach['content'],'rb'); if($files) {
if($stream) { foreach($files as $f) {
$content = trim(stream_get_contents($stream,4096)); $clsname = '\\Zotlabs\\Thumbs\\' . ucfirst(basename($f,'.php'));
$content = str_replace("\r",'',$content); if(class_exists($clsname)) {
$content_a = explode("\n",$content); $x = new $clsname();
} if(method_exists($x,'Match')) {
if($content_a) { $matched = $x->Match($attach['filetype']);
$fsize = 4; if($matched) {
$lsize = 8; $x->Thumb($attach,$preview_style,$preview_width,$preview_height);
$image = imagecreate($isize,$isize);
imagecolorallocate($image,255,255,255);
$colour = imagecolorallocate($image,0,0,0);
$border = imagecolorallocate($image,64,64,64);
$x1 = 0;
$y1 = 0;
$x2 = ImageSX($image) - 1;
$y2 = ImageSY($image) - 1;
for($i = 0; $i < 2; $i++) {
ImageRectangle($image, $x1++, $y1++, $x2--, $y2--, $border);
}
foreach($content_a as $l => $t) {
$l = $l + 1;
$x = 3;
$y = ($l * $lsize) + 3 - $fsize;
imagestring($image,1,$x,$y,$t,$colour);
if(($l * $lsize) >= $isize) {
break;
} }
} }
imagejpeg($image,$attach['content'] . '.thumb'); if(method_exists($x,'MatchDefault')) {
$default_matched = $x->MatchDefault(substr($attach['filetype'],0,strpos($attach['filetype'],'/')));
if($default_matched) {
$default_controller = $x;
} }
} }
} }
} }
}
if(($default_controller) && (! file_exists(dbunescbin($attach['content']) . '.thumb'))) {
$default_controller->Thumb($attach,$preview_style,$preview_width,$preview_height);
}
}
}

49
Zotlabs/Thumbs/Text.php Normal file
View File

@ -0,0 +1,49 @@
<?php
namespace Zotlabs\Thumbs;
class Text {
function MatchDefault($type) {
return(($type === 'text') ? true : false );
}
function Thumb($attach,$preview_style,$height = 300, $width = 300) {
$stream = @fopen(dbunescbin($attach['content']),'rb');
if($stream) {
$content = trim(stream_get_contents($stream,4096));
$content = str_replace("\r",'',$content);
$content_a = explode("\n",$content);
}
if($content_a) {
$fsize = 4;
$lsize = 8;
$image = imagecreate($width,$height);
imagecolorallocate($image,255,255,255);
$colour = imagecolorallocate($image,0,0,0);
$border = imagecolorallocate($image,64,64,64);
$x1 = 0;
$y1 = 0;
$x2 = ImageSX($image) - 1;
$y2 = ImageSY($image) - 1;
for($i = 0; $i < 2; $i++) {
ImageRectangle($image, $x1++, $y1++, $x2--, $y2--, $border);
}
foreach($content_a as $l => $t) {
$l = $l + 1;
$x = 3;
$y = ($l * $lsize) + 3 - $fsize;
imagestring($image,1,$x,$y,$t,$colour);
if(($l * $lsize) >= $height) {
break;
}
}
imagejpeg($image,dbunescbin($attach['content']) . '.thumb');
}
}
}