Я тут подумал, и нашел более оптимальный способ загрузки файлов.
В результате установил на движок плагин, немножко доработал его.
И опять столкнулся с водяным знаком..
там он накладывается текстом, а нужна картинка. пытаюсь опять соединить, но что-то не так..
вот на всякий случай публикую код целиком (я бы привел конечно основную часть, но как показывает практика, сокращая вопрос - появляются какие-то детали, и оказывается делать нужно и вовсе по другому)
итак, это код плагина, который при загрузке картинки сжимает её размеры.
так же он наносит водяной знак на основе указанных параметров - текст, цвет, размер шрифта, прозрачность, которые вводятся через настройки плагина движка (джумла)
<?php
http://www.ionutlupu.me
http://www.gnu.org/copyleft/gpl.html
defined('_JEXEC') or die('Restricted access');
jimport('joomla.plugin.plugin');
class plgContentImageResizer extends JPlugin
{
public function onContentAfterSave($context, &$article, $isNew)
{
$imagesMIME = array('image/jpeg', 'image/png', 'image/gif');
if (!isset($article->type)) {
return;
}
if ( $article->type != 'application/octet-stream' ) {
$type = $article->type;
} else {
if (function_exists('finfo_file')) {
$finfo = new finfo(FILEINFO_MIME_TYPE);
$type = $finfo->file( $article->filepath );
} elseif(function_exists('mime_content_type')) {
$type = mime_content_type( $article->filepath );
} else {
$temp = explode('.',$article->filepath);
$key = count($temp)-1;
if(isset($temp[$key])) {
$type = strtolower($temp[$key]);
}
if ( $type == 'jpg' ) {
$type = 'jpeg';
}
$type = 'image/' . $type;
}
}
if (!in_array($type,$imagesMIME)) {
return true;
}
list($width, $height) = getimagesize($article->filepath);
switch ( $type ) {
case ('image/jpeg') :
$source = imagecreatefromjpeg($article->filepath);
break;
case('image/png') :
$source = imagecreatefrompng($article->filepath);
break;
case('image/gif') :
$source = imagecreatefromgif($article->filepath);
break;
}
if ( $this->params->get('algoritm') ) {
$setwidth = $this->params->get('width');
$setheight = $this->params->get('height');
if ( !$setwidth && !$setheight ) {
return;
}
if ( $width > $setwidth || $height > $setheight ) {
$koe=$width/$setwidth;
$newheight=ceil($height/$koe);
$newwidth = $setwidth;
}
if ($width < $setwidth) {$newwidth = $width;
$newheight = $height;}
}
$new = imagecreatetruecolor($newwidth, $newheight);
if ( $type == 'image/gif' || $type == 'image/png' ){
$transparency = imagecolortransparent($source);
if ( $type == 'image/gif' && $transparency >= 0 ){
list($r, $g, $b) = array_values (imagecolorsforindex($source, $transparency));
$transparency = imagecolorallocate($new, $r, $g, $b);
imagefill($new, 0, 0, $transparency);
imagecolortransparent($new, $transparency);
}
elseif ($type == 'image/png') {
imagealphablending($new, false);
$color = imagecolorallocatealpha($new, 0, 0, 0, 127);
imagefill($new, 0, 0, $color);
imagesavealpha($new, true);
}
}
imagecopyresampled($new, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
if( $this->params->get('watermark')) {
$text = $this->params->get('watermark');
$font_size = ($size = $this->params->get('watermarkFontSize')) ? $size : 10;
$opacity = ( $opacity = $this->params->get('watermarkOpacity') ) ? ($opacity * 127)/100 : 0;
if ( $rgbcolor = $this->params->get('watermarkFontColor') ) {
$fontcolor = $this->hex2rgb($rgbcolor);
$color = imagecolorallocatealpha($new, $fontcolor[0], $fontcolor[1], $fontcolor[2], $opacity);
} else {
$color = imagecolorallocatealpha($new, 0, 0, 0, $opacity);
}
$font = JPATH_CONFIGURATION . DIRECTORY_SEPARATOR . 'plugins' . DIRECTORY_SEPARATOR . 'content' . DIRECTORY_SEPARATOR . 'imageresizer' . DIRECTORY_SEPARATOR . 'clrn.ttf';
$coordx = ($font_size + 10);
$coordy = ($font_size + 10);
imagettftext($new, $font_size, 0, 10, $font_size, $color, $font, $text);
}
switch ( $type ) {
case ('image/jpeg') :
imagejpeg($new, $article->filepath,90);
break;
case('image/png') :
imagepng($new, $article->filepath,0);
break;
case('image/gif') :
imagegif($new, $article->filepath);
break;
}
imagedestroy($source);
imagedestroy($new);
return true;
}
private function hex2rgb($hex) {
$hex = str_replace("#", "", $hex);
if(strlen($hex) == 3) {
$r = hexdec(substr($hex,0,1).substr($hex,0,1));
$g = hexdec(substr($hex,1,1).substr($hex,1,1));
$b = hexdec(substr($hex,2,1).substr($hex,2,1));
} else {
$r = hexdec(substr($hex,0,2));
$g = hexdec(substr($hex,2,2));
$b = hexdec(substr($hex,4,2));
}
$rgb = array($r, $g, $b);
return $rgb;
}
}
?>
заменяю это
if( $this->params->get('watermark')) { ....}
if( $this->params->get('watermark')) {
$watermark = imagecreatefrompng('watermark.png');
$ww = imagesx($watermark);
$wh = imagesy($watermark);
$new=imagecopy($new, $watermark, $newwidth-$ww-15, $newheight-$wh-10, 0, 0, $ww, $wh);
}
но почему-то снова не работает.
прочитал сообщение inpost , проверил, попробовал выше добавить переменной new сделать так
$new=imagecopyresampled($new, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
или как это делается?