[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Изменить размер фото и наложить водяной знак
Страницы: 1, 2
inpost
nikki4
Ты бы разобрался с моей подсказкой, чтобы самому ориентироваться в коде, полезнее же будет.

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
nikki4
Я тут подумал, и нашел более оптимальный способ загрузки файлов.
В результате установил на движок плагин, немножко доработал его.
И опять столкнулся с водяным знаком..

там он накладывается текстом, а нужна картинка. пытаюсь опять соединить, но что-то не так..

вот на всякий случай публикую код целиком (я бы привел конечно основную часть, но как показывает практика, сокращая вопрос - появляются какие-то детали, и оказывается делать нужно и вовсе по другому)

итак, это код плагина, который при загрузке картинки сжимает её размеры.
так же он наносит водяной знак на основе указанных параметров - текст, цвет, размер шрифта, прозрачность, которые вводятся через настройки плагина движка (джумла)


<?php
/*
* @component ImageResizer
* @version 1.0 "Radius"
* @website :
http://www.ionutlupu.me
* @copyright Ionut Lupu. All rights reserved.
* @license :
http://www.gnu.org/copyleft/gpl.html GNU/GPL
*/


// Check to ensure this file is included in Joomla!

defined('_JEXEC') or die('Restricted access');

// import library dependencies
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 we upload files by using non-flash uploader
if ( $article->type != 'application/octet-stream' ) {

$type = $article->type;

// if it's using flash uploader(multiple files) the $article->type will be application/octet-stream
} 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 it's not a picture or is not supported, it's not our business :)
if (!in_array($type,$imagesMIME)) {
return true;
}


// get current image sizes
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;
}


// get sizes for the new image

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;}
}



// load new image
$new = imagecreatetruecolor($newwidth, $newheight);

// we must take care about png/gif transparency before resize
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);
}
}



// resize
imagecopyresampled($new, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);


// add watermark
if( $this->params->get('watermark')) {

// The text to draw
$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);
}

// Replace path by your own font path
$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);
}




// Output
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 сделать так

// resize
$new=imagecopyresampled($new, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);



или как это делается?
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.