Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
Страницы: (2) 1 [2]  ( Перейти к первому непрочитанному сообщению )  
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Изменить размер фото и наложить водяной знак, почему у меня это не работает?
inpost  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Помагите Здесь живу!!!
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 22688
Пользователь №: 20039
На форуме: 6 лет, 11 месяцев, 25 дней
Карма: 599




nikki4
Ты бы разобрался с моей подсказкой, чтобы самому ориентироваться в коде, полезнее же будет.


--------------------
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
PMПисьмо на e-mail пользователюICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
nikki4  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Старик
***

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 135
Пользователь №: 19542
На форуме: 7 лет, 1 месяц, 2 дня
Карма:




Я тут подумал, и нашел более оптимальный способ загрузки файлов.
В результате установил на движок плагин, немножко доработал его.
И опять столкнулся с водяным знаком..

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

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

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


<?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);



или как это делается?
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
inpost  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Помагите Здесь живу!!!
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 22688
Пользователь №: 20039
На форуме: 6 лет, 11 месяцев, 25 дней
Карма: 599




Опять же, вместо того, чтобы подправить в том коде одну строчку ты скачиваешь большой левый скрипт, в котором мне ЗАНОВО надо разбираться? Второй раз не буду искать проблемы, первый раз назвал, но ты не захотел править...


--------------------
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
PMПисьмо на e-mail пользователюICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
nikki4  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Старик
***

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 135
Пользователь №: 19542
На форуме: 7 лет, 1 месяц, 2 дня
Карма:




Цитата (inpost @ 13.01.2016 - 13:32)
Опять же, вместо того, чтобы подправить в том коде одну строчку ты скачиваешь большой левый скрипт, в котором мне ЗАНОВО надо разбираться? Второй раз не буду искать проблемы, первый раз назвал, но ты не захотел править...

другой скрипт скачал, так как другой принцип работы.

ранее я пытался на скрипт простановки водяного знака добавить сжатие фотки.
потом до меня дошло, что сервер будет завален большими фотками, потому надо изначально загружать сжатые.

вот я и нашел скрипт, который сжимает фото при загрузке через панель сайта, а теперь уже водяной знак картинкой пытаюсь прикрепить.

А по поводу
Цитата
первый раз назвал, но ты не захотел править...


ImageCopyResampled ($dst - В переменную $dst ты сохранил уменьшенное изображение
imagecopy($src - в $src ты добавил watermark.
ImageJPEG ($dst - вывел $dst

У тебя watermark добавляется в $src изображение, в СТАРОЕ, а не НОВОЕ.




я вообще-то исправил в новой версии с учетом этого.

впрочем только что попробовал старый скрипт - но не работает все-равно водяной знак


и вот опять сжимает, но знак не ставит
<?php

$watermark = imagecreatefrompng('watermark.png');
$ww = imagesx($watermark);
$wh = imagesy($watermark);


$size=GetImageSize ("1.jpg");
$src=ImageCreateFromJPEG ("1.jpg");
$iw=$size[0];
$ih=$size[1];
$koe=$iw/800;
$new_h=ceil ($ih/$koe);
$dst=ImageCreateTrueColor (800, $new_h);


ImageCopyResampled ($dst, $src, 0, 0, 0, 0, 800, $new_h, $iw, $ih);
imagecopy($dst, $watermark, $iw-$ww-15, $ih-$wh-10, 0, 0, $ww, $wh);
imagealphablending($dst, false);
imagesavealpha($dst, true); // Устанавливаем прозрачность для png файла

ImageJPEG ($dst, "small_photo.jpg", 100);

imagedestroy($dst);
?>


пробовал и так:

<?php

$dst=ImageCopyResampled ($dst, $src, 0, 0, 0, 0, 800, $new_h, $iw, $ih);
$dst=imagecopy($dst, $watermark, $iw-$ww-15, $ih-$wh-10, 0, 0, $ww, $wh);
$dst=imagealphablending($dst, false);
$dst=imagesavealpha($dst, true); // Устанавливаем прозрачность для png файла [php]

но тогда выдает ошибки типа
[QUOTE]Warning: imagecopy() expects parameter 1 to be resource, boolean given in[/QUOTE]
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Kusss  
[x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1355
Пользователь №: 28976
На форуме: 5 лет, 4 месяца, 4 дня
Карма: 77




У меня получилось вот что.
Если изображения будут заливать пользователи, нужно чуть по другому
Результат png на jpg: http://pixs.ru/showimage/image2jpg_5649562_20246842.jpg
Рузьтат png на png http://pixs.ru/showimage/image2png_8904839_20247189.png
function watermark($file, $watermarkFile, $valid_extensions, $newWidth=0, $quality = 85, $quality_png = 0) {  

// проверяем расширение файла
$file_extension = pathinfo($file, PATHINFO_EXTENSION);
if(!in_array(strtolower($file_extension), $valid_extensions)){
return array('status' => 0);
}

$what = getimagesize($file);
$width = $what[0];
$height = $what[1];

if (!empty($newWidth) and $width > $newWidth){
$newWidth = $newWidth;
$newHeight = round($height * $newWidth / $width) ;
}
else{
$newHeight = $height;
$newWidth = $width ;
}


// создаем холст
$original = imageCreateTrueColor($newWidth,$newHeight);

// Изображение на холст, и уменьшаем размер если это необходимо.
if ($what['mime'] == 'image/jpeg') {
if ($width != $newWidth) {
$o_im = imageCreateFromJPEG($file);
imagecopyresampled($original, $o_im, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height);
imagedestroy($o_im);
} else
$original = imageCreateFromJPEG($file);
}
if ($what['mime'] == 'image/png') {
if ($width != $newWidth) {
$o_im = imageCreateFromPNG($file);

imagecopyresampled($original, $o_im, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height);
imagedestroy($o_im);
} else {
$original = imageCreateFromPNG($file);
}
}


// параметры файла
$watermark = imageCreateFromPNG($watermarkFile) ;
list($ww, $wh) = getimagesize($watermarkFile);
//нанесение водяного знака
imagecopy($original, $watermark, 0, 0, 0, 0, $ww, $wh);

/*
header('Content-type: image/jpeg');
imageJPEG($original);
*/

// Уменьшаем качество, записываем в файл

if ($what['mime'] == 'image/jpeg') {
$newFile = 'test/image2.jpg';
imageJPEG($original, $newFile, $quality);
}
if ($what['mime'] == 'image/png') {
$newFile = 'test/image2.png';
// Прозрачность
imagealphablending($original, false);
imagesavealpha($original, true);

ImagePNG($original, $newFile, $quality_png);
}

// очищаем память
imagedestroy($original);
imagedestroy($watermark);

return array('status' => 1, 'filename' => $newFile);
}


// Оригинальный файл
$original = 'test/img.jpg';
// Водяной знак
$watermark = 'test/18.png';
// допустимые расширения файла.
$valid_extensions = array('png', 'jpeg', 'jpg');
// Уменьшить до, если null - оригинальный размер
$newWidth = null;

// Качество для jpg и png
$quality = 85;
$quality_png = 0;

$newFile = watermark($original , $watermark, $valid_extensions, $newWidth, $quality, $quality_png );
// Если нет ошибок
if (!empty($newFile['status']))
echo '<img src="/'.$newFile['filename'].'">';


Это сообщение отредактировал Kusss - 14.01.2016 - 01:27
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
inpost  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Помагите Здесь живу!!!
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 22688
Пользователь №: 20039
На форуме: 6 лет, 11 месяцев, 25 дней
Карма: 599




Цитата
ранее я пытался на скрипт простановки водяного знака добавить сжатие фотки.
потом до меня дошло, что сервер будет завален большими фотками, потому надо изначально загружать сжатые.


Какая разница между папками /tmp и /uploads , если и там и там лежит одна и та же фотка? Ты же делаешь 2 операции, операция№1 - загрузка фотки. Операция№2 - ресайз и наложение watermark. Когда загрузка из-вне, то выполняешь операцию№1, следом операцию№2 (2 разных функции), а когда надо пережать уже лежащие фотки, то только операцию №2.

Итого у тебя была функция, которая выполняла операцию№2, ты её взял и удалил, вместо того, чтобы дописать её код. Ну и как после этого тебе помогать, если ты сам не хочешь учиться?

Цитата
вот я и нашел скрипт, который сжимает фото при загрузке через панель сайта, а теперь уже водяной знак картинкой пытаюсь прикрепить.

Хватит искать код. Норм коды интегрированы уже в CMS и FrameWork, остальные лишь обучающие материалы над которыми ещё надо РАБОТАТЬ И РАБОТАТЬ! Раз ты работаешь, то можешь смело и сам эти несколько строк кода совместить.


--------------------
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
PMПисьмо на e-mail пользователюICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
inpost  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Помагите Здесь живу!!!
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 22688
Пользователь №: 20039
На форуме: 6 лет, 11 месяцев, 25 дней
Карма: 599




И ещё:
error_reporting(-1);
ini_set('display_errors',1);


первыми строчками кода и смотри, может какая ошибка лезет.


--------------------
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
PMПисьмо на e-mail пользователюICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
nikki4  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Старик
***

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 135
Пользователь №: 19542
На форуме: 7 лет, 1 месяц, 2 дня
Карма:




Задача решена. Проблема заключалась в слешах
Локально на денвере - в одну сторону идут
А на сайте - в другую
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темыСтраницы: (2) 1 [2]  Ответ в темуСоздание новой темыСоздание опроса