Добавяне на воден знак

montana

Registered
Имам кодовете и пробвах какво ли не, но не става или пък ако стане не се записва в дб-то. Някой може ли да ми ги сглоби в 1.. ?

Кода за водния знак (Или този може да се ползва http://www.cafewebmaster.com/image-watermark-php)
Код:
<?php
  //--------------------------------
  // CREATE WATERMARK FUNCTION
  //--------------------------------

  define( 'WATERMARK_OVERLAY_IMAGE', 'watermark.png' );
  define( 'WATERMARK_OVERLAY_OPACITY', 50 );
  define( 'WATERMARK_OUTPUT_QUALITY', 90 );

  function create_watermark( $source_file_path, $output_file_path )
  {
    list( $source_width, $source_height, $source_type ) = getimagesize( $source_file_path );

    if ( $source_type === NULL )
    {
      return false;
    }

    switch ( $source_type )
    {
      case IMAGETYPE_GIF:
        $source_gd_image = imagecreatefromgif( $source_file_path );
        break;
      case IMAGETYPE_JPEG:
        $source_gd_image = imagecreatefromjpeg( $source_file_path );
        break;
      case IMAGETYPE_PNG:
        $source_gd_image = imagecreatefrompng( $source_file_path );
        break;
      default:
        return false;
    }

    $overlay_gd_image = imagecreatefrompng( WATERMARK_OVERLAY_IMAGE );
    $overlay_width = imagesx( $overlay_gd_image );
    $overlay_height = imagesy( $overlay_gd_image );

    imagecopymerge(
      $source_gd_image,
      $overlay_gd_image,
      $source_width - $overlay_width,
      $source_height - $overlay_height,
      0,
      0,
      $overlay_width,
      $overlay_height,
      WATERMARK_OVERLAY_OPACITY
    );

    imagejpeg( $source_gd_image, $output_file_path, WATERMARK_OUTPUT_QUALITY );

    imagedestroy( $source_gd_image );
    imagedestroy( $overlay_gd_image );
  }

  //--------------------------------
  // FILE PROCESSING FUNCTION
  //--------------------------------

  define( 'UPLOADED_IMAGE_DESTINATION', 'img/originals/' );
  define( 'PROCESSED_IMAGE_DESTINATION', 'img/upload/' );

  function process_image_upload( $Field )
  {
    $temp_file_path = $_FILES[ $Field ][ 'tmp_name' ];
    $temp_file_name = $_FILES[ $Field ][ 'name' ];

    list( , , $temp_type ) = getimagesize( $temp_file_path );

    if ( $temp_type === NULL )
    {
      return false;
    }

    switch ( $temp_type )
    {
      case IMAGETYPE_GIF:
        break;
      case IMAGETYPE_JPEG:
        break;
      case IMAGETYPE_PNG:
        break;
      default:
        return false;
    }

    $uploaded_file_path = UPLOADED_IMAGE_DESTINATION . $temp_file_name;
    $processed_file_path = PROCESSED_IMAGE_DESTINATION . preg_replace( '/\\.[^\\.]+$/', '.jpg', $temp_file_name );

    move_uploaded_file( $temp_file_path, $uploaded_file_path );

    $result = create_watermark( $uploaded_file_path, $processed_file_path );

    if ( $result === false )
    {
      return false;
    }
    else
    {
      return array( $uploaded_file_path, $processed_file_path );
    }
  }

  //--------------------------------
  // END OF FUNCTIONS
  //--------------------------------

  $result = process_image_upload( 'obrazek' );

  if ( $result === false )
  {

    echo '<br>An error occurred during file processing.';
  }
  else
  {
    echo '<br>Original image saved as <a href="' . $result[ 0 ] . '" target="_blank">' . $result[ 0 ] . '</a>';
    echo '<br>Watermarked image saved as <a href="' . $result[ 1 ] . '" target="_blank">' . $result[ 1 ] . '</a>';
  }
?>


Кода за качване на изображение

Код:
<?php
if (isset($_SESSION['user_id']) and isset($_SESSION['login']))
{
if(isset($_POST['submit_obrazek']) and $_GET['co']=='obrazek') 
{
if(!$_POST['tytul'] || !$_FILES['obrazek']['name']) {
	echo '<b>Не сте попълнили полето със заглавие!</b><br/><br/><img src="img/error.png" /><br /><br/><a href="add.php">« Назад</a>';
	}
	else {
//UPLOAD OBRAZKA

		$sp1 = explode(".",($_FILES['obrazek']['name']));
            if($sp1[1] == "gif" or $sp1[1] == "jpg" or $sp1[1] == "JPG" or $sp1[1] == "GIF" or $sp1[1] == "jpeg" or $sp1[1] == "JPEG" or $sp1[1] == "png" or $sp1[1] == "PNG")
			{
		$data_img=date('dmYHis');
		$uploaddir = 'img/upload/'.$data_img.'-';
		$_FILES['obrazek']['name'] = przyjazny_string($_FILES['obrazek']['name']);
		if(move_uploaded_file($_FILES['obrazek']['tmp_name'], $uploaddir.$_FILES['obrazek']['name']))
		{
		//Zmiana rodzielczości obrazka
		if($sp1[1] != "gif" AND $sp1[1]!= "GIF") {
			$image = new SimpleImage();
			$image->load($uploaddir.$_FILES['obrazek']['name']);
			if($image->getWidth() > 670) {
				$image->resizeToWidth(670);
				$image->save($uploaddir.$_FILES['obrazek']['name']);
			}
			else { //Zmiana wielkości do tego samego rozmiaru ale z kompresją
				$image->resizeToWidth($image->getWidth());
				$image->save($uploaddir.$_FILES['obrazek']['name']);
			}
		}
		//////////////////////////////
		$obrazek='img/upload/'.$data_img.'-'.$_FILES['obrazek']['name'];
		$tytul=$_POST['tytul'];
		$zrodlo=$_POST['zrodlo'];
		$autor=$_SESSION['login'];
		$data=date('d-m-Y H:i');
				
		$zapytanie = "INSERT INTO `shity` (`id`, `tytul`, `obrazek`, `zrodlo`, `autor`, `data`, `typ`) VALUES ('', '$tytul', '$obrazek', '$zrodlo', '$autor', '$data', 'obrazek')"; 
	    $wykonaj = mysql_query($zapytanie); 
		echo '<b>Успешно добавихте изображението</b><br/><br/><img src="img/ok.png" /><br /><br/>
		<a href="index.php">« Към началната страница</a>'; 
		}
		else {
		echo '<b>Възникна неочаквана грешка.</b><br/><br/><img src="img/error.png" /><br /><br/>';
		echo '<a href="add.php">« Опитайте отново</a>';
		}
			}
		else {
		echo '<b>Този формат не е разрешен!</b><br/><br/><img src="img/error.png" /><br /><br/><a href="add.php">« Опитайте отново</a>';
		}
//KONIEC UPLOAD OBRAZKA
	}
}
else {
?>
 
4ef0 каза:

Нестава! Нека някой да го направи ако може..
Ето моя жалък опит:

<?php
if (isset($_SESSION['user_id']) and isset($_SESSION['login']))
{
if(isset($_POST['submit_obrazek']) and $_GET['co']=='obrazek')
{
if(!$_POST['tytul'] || !$_FILES['obrazek']['name']) {
echo '<b>Не сте попълнили полето със заглавие!</b><br/><br/><img src="img/error.png" /><br /><br/><a href="add.php">« Назад</a>';
}
else {
//UPLOAD OBRAZKA


$sp1 = explode(".",($_FILES['obrazek']['name']));
if($sp1[1] == "gif" or $sp1[1] == "jpg" or $sp1[1] == "JPG" or $sp1[1] == "GIF" or $sp1[1] == "jpeg" or $sp1[1] == "JPEG" or $sp1[1] == "png" or $sp1[1] == "PNG")
{
$data_img=date('dmYHis');
$uploaddir = 'img/upload/'.$data_img.'-';
$_FILES['obrazek']['name'] = przyjazny_string($_FILES['obrazek']['name']);
if(move_uploaded_file($_FILES['obrazek']['tmp_name'], $uploaddir.$_FILES['obrazek']['name']))
{
//Zmiana rodzielczości obrazka
if($sp1[1] != "gif" AND $sp1[1]!= "GIF") {
$image = new SimpleImage();
$image->load($uploaddir.$_FILES['obrazek']['name']);
if($image->getWidth() > 670) {
$image->resizeToWidth(670);
$image->save($uploaddir.$_FILES['obrazek']['name']);
}
else { //Zmiana wielkości do tego samego rozmiaru ale z kompresją
$image->resizeToWidth($image->getWidth());
$image->save($uploaddir.$_FILES['obrazek']['name']);
}
}
////////////////////////////////////////////////////////////////////////////

$Watermark = imagecreatefrompng("watermark.png"); //тук си задаваде файла които е водния знак, png
$putq = 'img/upload/'.$data_img.'-'.$_FILES['obrazek']['name'];
$Image = imagecreatefromjpeg("$putq");

imagecolortransparent($Watermark,imagecolorat($Watermark,0,0));

$PosX = imagesx($Image)-imagesx($Watermark)-5;
$PosY = imagesy($Image)-imagesy($Watermark)-5;
imagecopymerge($Image,$Watermark,$PosX,$PosY,0,0,imagesx($Watermark),imagesy($Watermark),50);
imagepng($Image, $uploaddir);



$obrazek='img/upload/'.$data_img.'-'.$_FILES['obrazek']['name'];
$tytul=$_POST['tytul'];
$zrodlo=$_POST['zrodlo'];
$autor=$_SESSION['login'];
$data=date('d-m-Y H:i');
$zapytanie = "INSERT INTO `shity` (`id`, `tytul`, `obrazek`, `zrodlo`, `autor`, `data`, `typ`) VALUES ('', '$tytul', '$obrazek', '$zrodlo', '$autor', '$data', 'obrazek')";
$wykonaj = mysql_query($zapytanie);
echo '<b>Успешно добавихте изображението</b><br/><br/><img src="img/ok.png" /><br /><br/>
<a href="index.php">« Към началната страница</a>';
}
else {
echo '<b>Възникна неочаквана грешка.</b><br/><br/><img src="img/error.png" /><br /><br/>';
echo '<a href="add.php">« Опитайте отново</a>';
}
}
else {
echo '<b>Този формат не е разрешен!</b><br/><br/><img src="img/error.png" /><br /><br/><a href="add.php">« Опитайте отново</a>';
}
//KONIEC UPLOAD OBRAZKA
}
}
else {
?>
 
Съгражданино :D Най-простия начин е това:

PHP:
<?php
header('content-type: image/jpeg');
$watermark = imagecreatefromgif('watermark.gif'); //водния знак
$watermark_width = imagesx($watermark);
$watermark_height = imagesy($watermark);
$image = imagecreatetruecolor($watermark_width, $watermark_height);
$file_type = strtolower(end(explode(".", $_GET['img'])));
if(($file_type=="jpg") OR ($file_type == "jpeg")){
	$imagecreatefrom="imagecreatefromjpeg";
} else if ($file_type=="gif"){
	$imagecreatefrom="imagecreatefromgif";
} else if ($file_type=="png"){
	$imagecreatefrom="imagecreatefrompng";
}
$image = $imagecreatefrom($_GET['img']);
$size = getimagesize($_GET['img']);
$dest_x = $size[0] - $watermark_width - 5;
$dest_y = $size[1] - $watermark_height - 5;
imagecopymerge($image, $watermark, $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height, 50);
imagejpeg($image);
imagedestroy($image);
imagedestroy($watermark);
?>

И картинката с воден знак ще се зарежда така:
http://site.com/watermark.php?img=kartinka.jpg

Трябва да има GD библиотека на хостинга.

Вече, ако искаш при самото качване да се добавя водния знак, вместо да се използва друг файл както по-горе..
Трябва да създадеш нова папка, в която ще качваш временните файлове, добавяш им знака и ги записваш в главната директория/тази която ще седят снимките/, след което изтриваш временния файл.

LAST EDIT:

Поиграх си малко - кода , които си дал е готин, може да го направиш като клас и да си бачкаш с него, пък и така не пречи. Също така, можеш да направиш и след създаването на снимката с водния знак оригиналната снимка да се трие..

PHP:
<?php
error_reporting(E_ALL);
ini_set("display_errors", true);
define('WATERMARK_OVERLAY_IMAGE', 'watermark.png'); //картинката на водния знак
define('WATERMARK_OVERLAY_OPACITY', 50);
define('WATERMARK_OUTPUT_QUALITY', 90);
define('UPLOADED_IMAGE_DESTINATION', 'img/tmp/'); //папка с оригинални снимки
define('PROCESSED_IMAGE_DESTINATION', 'img/'); //папка със снимки с воден знак

function create_watermark($source_file_path, $output_file_path) {
    list($source_width, $source_height, $source_type) = getimagesize($source_file_path);
	if ($source_type === NULL) { return false; }

	switch ($source_type) {
		case IMAGETYPE_GIF:
			$source_gd_image = imagecreatefromgif( $source_file_path );
		break;
		case IMAGETYPE_JPEG:
			$source_gd_image = imagecreatefromjpeg( $source_file_path );
        break;
		case IMAGETYPE_PNG:
			$source_gd_image = imagecreatefrompng( $source_file_path );
		break;
		default:
		return false;
	}
	$overlay_gd_image = imagecreatefrompng( WATERMARK_OVERLAY_IMAGE );
	$overlay_width = imagesx( $overlay_gd_image );
	$overlay_height = imagesy( $overlay_gd_image );
	imagecopymerge(
		$source_gd_image,
		$overlay_gd_image,
		$source_width - $overlay_width, 
		$source_height - $overlay_height, 
		0, 
		0, 
		$overlay_width, 
		$overlay_height, 
		WATERMARK_OVERLAY_OPACITY
    );
	imagejpeg( $source_gd_image, $output_file_path, WATERMARK_OUTPUT_QUALITY );
	imagedestroy( $source_gd_image );
	imagedestroy( $overlay_gd_image );
}
function process_image_upload($Field) {
	$temp_file_path = $_FILES[$Field]['tmp_name'];
	$temp_file_name = $_FILES[$Field]['name'];
	list(,,$temp_type ) = getimagesize($temp_file_path);
	if ($temp_type === NULL) { return false; }
	
	switch ($temp_type) {
		case IMAGETYPE_GIF:
		break;
		case IMAGETYPE_JPEG:
		break;
		case IMAGETYPE_PNG:
		break;
		default:
		return false;
	}
	$uploaded_file_path = UPLOADED_IMAGE_DESTINATION . $temp_file_name;
	$processed_file_path = PROCESSED_IMAGE_DESTINATION . preg_replace( '/\\.[^\\.]+$/', '.jpg', $temp_file_name );
	move_uploaded_file( $temp_file_path, $uploaded_file_path );
	$result = create_watermark( $uploaded_file_path, $processed_file_path );
	if ($result === false) {
      return false;
    } else {
      return array($uploaded_file_path, $processed_file_path);
	}
}
if(isSet($_POST['submit'])) {
	$result = process_image_upload('image_file');
	if ($result === false) {
		echo '<br>An error occurred during file processing.';
	} else {
		echo '<br>Снимката с водния знак: <a href="' . $result[ 0 ] . '" target="_blank">' . $result[ 0 ] . '</a>';
		echo '<br>Оригинална снимка: <a href="' . $result[ 1 ] . '" target="_blank">' . $result[ 1 ] . '</a>';
	}
} else {
	echo '<form method="post" enctype="multipart/form-data">
	Избери снимка: <input type="file" name="image_file"><br />
	<input type="submit" name="submit" value="Давай!">
	</form>';
}
?>
 

Back
Горе