|
użytkowników online: 81
|
OPINIE UŻYTKOWNIKÓW
|
Z mojej strony serwisowi należy się bardzo mocna pochwała. Nawet późna pora zgłoszenia problemu (23.00) nie przeszkodziła Darkowi w jego rozwiązaniu. Do tego poziom odpisywania na maile jest bardzo wysoki... wszystko wykłada jak cierpliwy nauczyciel. Śmiało mogę przyznać, że zamieszczone na stronach porady są rzeczowo opisane - a nie jak to bywa w innych serwisach mamy sam kod i nic poza tym! Jeszcze raz wielkie dzięki!
Damian Jarosz
Adminer.pl
|
|
PODRĘCZNIK PHP 5.x, 4.x, 3.x - częściowo spolszczony / źródło: www.php.net
[Spis]
[A]
[B]
[C]
[D]
[E]
[F]
[G]
[H]
[I]
[J]
[K]
[L]
[M]
[N]
[O]
[P]
[Q]
[R]
[S]
[T]
[U]
[V]
[X]
[W]
[Z]
imagecopymerge (PHP 4 >= 4.0.1, PHP 5) imagecopymerge -- Copy and merge part of an image Descriptionint imagecopymerge ( resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h, int pct )
Copy a part of src_im onto
dst_im starting at the x,y coordinates
src_x, src_y with
a width of src_w and a height of
src_h. The portion defined will be copied
onto the x,y coordinates, dst_x and
dst_y.
The two images will be merged according to pct
which can range from 0 to 100. When pct = 0,
no action is taken, when 100 this function behaves identically
to imagecopy() for pallete images, while it
implements alpha transparency for true colour images.
Notatka: This function was added in PHP 4.0.6
User Contributed Notesnick at prient dot co dot uk
01-Nov-2005 11:15
Task: Rotate a large image, then reduce it in size and place it on a small background (i.e. as an Inset).
Problem: If you resize the image first, the rotation becomes hugely aliased... So, it makes sense to rotate it first, then shrink it.
Unfortunately, when you resample the image, you lose the background color (at least, some of it may change), so you can no longer set transparancy as you require. If instead you resize the image (rather than resample), again, the aliasing looks bad.
Solution: Resize the background - make it bigger. Then add the original (large) inset, and resize the whole thing back to normal.
<?php
$resizePercentage = 0.25;
$iSource = ImageCreateFromJpeg($source_file);
$iBackground = ImageCreateFromJpeg($background_file);
...
$cBackground = ImageColorClosest($iSource, 255, 0, 255);
ImageColorTransparent($iSource, $cBackground);
$iBackground = ImageResize($iTemplate, ImageSX($iBackground ) / $resizePercentage, ImageSY($iBackground ) / $resizePercentage);
ImageCopyMerge($iBackground , $iSource,
((ImageSX($iBackground ) - ImageSX($iSource)) / 2),
((ImageSY($iBackground ) - ImageSY($iSource)) / 2) - 25, 0, 0, ImageSX($iWorking), ImageSY($iSource), 100);
$iBackground = ImageResize($iTemplate, ImageSX($iBackground ) * $resizePercentage, ImageSY($iBackground ) * $resizePercentage);
header("Content-Type: image/png");
ImagePng($iBackground);
exit();
function ImageResize($pImage, $t_width, $t_height) {
$iCanvas = @ImageCreateTrueColor($t_width, $t_height);
$s_width = ImageSX($pImage);
$s_height = ImageSY($pImage);
ImageCopyResampled($iCanvas, $pImage, 0, 0, 0, 0, $t_width, $t_height, $s_width, $s_height);
return $iCanvas;
}
?>
Ascent [at] WebAQ.com
24-May-2005 11:41
First you need make 0~9 gif format images and background image.
<?php
$rands = rand(1000,9999);
session_start();
$_SESSION['random_image_number_check'] = $rands;
$bg = './random_image_bg.jpg';
$numimgp = './random_image_number_%d.gif';
$numimg1 = sprintf($numimgp,substr($rands,0,1));
$numimg2 = sprintf($numimgp,substr($rands,1,1));
$numimg3 = sprintf($numimgp,substr($rands,2,1));
$numimg4 = sprintf($numimgp,substr($rands,3,1));
$ys1 = rand(-4,4);
$ys2 = rand(-4,4);
$ys3 = rand(-4,4);
$ys4 = rand(-4,4);
$bgImg = imageCreateFromJPEG($bg);
$nmImg1 = imageCreateFromGIF($numimg1);
$nmImg2 = imageCreateFromGIF($numimg2);
$nmImg3 = imageCreateFromGIF($numimg3);
$nmImg4 = imageCreateFromGIF($numimg4);
imageCopyMerge($bgImg, $nmImg1, 10, $ys1, 0, 0, 20, 30, 50);
imageCopyMerge($bgImg, $nmImg2, 30, $ys2, 0, 0, 20, 30, 50);
imageCopyMerge($bgImg, $nmImg3, 50, $ys3, 0, 0, 20, 30, 50);
imageCopyMerge($bgImg, $nmImg4, 70, $ys4, 0, 0, 20, 30, 50);
header("Content-type: image/jpg");
ImageJPEG($bgImg,"",100);
imagedestroy($bgImg);
imagedestroy($nmImg1);
imagedestroy($nmImg2);
imagedestroy($nmImg3);
imagedestroy($nmImg4);
?>
enjoy!
Steve
23-May-2005 08:03
Building upon backglancer's and stefan's posts below, the following script will lay a 24-bit PNG watermark over any image.
To prepare a 24-bit watermark, I recommend creating a white logo or text over a transparent background in Photoshop. Save this as a 24-bit PNG via 'Save for the Web...'. Be sure to set the transparency of the logo layer in Photoshop itself. 30-40% is a good setting.
Once the assets are prepared, throw the full or relative server paths at the watermark function below:
/******************************************************************/
function watermark($sourcefile, $watermarkfile) {
#
# $sourcefile = Filename of the picture to be watermarked.
# $watermarkfile = Filename of the 24-bit PNG watermark file.
#
//Get the resource ids of the pictures
$watermarkfile_id = imagecreatefrompng($watermarkfile);
imageAlphaBlending($watermarkfile_id, false);
imageSaveAlpha($watermarkfile_id, true);
$fileType = strtolower(substr($sourcefile, strlen($sourcefile)-3));
switch($fileType) {
case('gif'):
$sourcefile_id = imagecreatefromgif($sourcefile);
break;
case('png'):
$sourcefile_id = imagecreatefrompng($sourcefile);
break;
default:
$sourcefile_id = imagecreatefromjpeg($sourcefile);
}
//Get the sizes of both pix
$sourcefile_width=imageSX($sourcefile_id);
$sourcefile_height=imageSY($sourcefile_id);
$watermarkfile_width=imageSX($watermarkfile_id);
$watermarkfile_height=imageSY($watermarkfile_id);
$dest_x = ( $sourcefile_width / 2 ) - ( $watermarkfile_width / 2 );
$dest_y = ( $sourcefile_height / 2 ) - ( $watermarkfile_height / 2 );
// if a gif, we have to upsample it to a truecolor image
if($fileType == 'gif') {
// create an empty truecolor container
$tempimage = imagecreatetruecolor($sourcefile_width,
$sourcefile_height);
// copy the 8-bit gif into the truecolor image
imagecopy($tempimage, $sourcefile_id, 0, 0, 0, 0,
$sourcefile_width, $sourcefile_height);
// copy the source_id int
$sourcefile_id = $tempimage;
}
imagecopy($sourcefile_id, $watermarkfile_id, $dest_x, $dest_y, 0, 0,
$watermarkfile_width, $watermarkfile_height);
//Create a jpeg out of the modified picture
switch($fileType) {
// remember we don't need gif any more, so we use only png or jpeg.
// See the upsaple code immediately above to see how we handle gifs
case('png'):
header("Content-type: image/png");
imagepng ($sourcefile_id);
break;
default:
header("Content-type: image/jpg");
imagejpeg ($sourcefile_id);
}
imagedestroy($sourcefile_id);
imagedestroy($watermarkfile_id);
}
backglancer in the hotmail
17-May-2005 11:44
I was about to kill myself....
any one of you trying to merge a SEMI transparent png...
use imagecopy :)
<?
$flag = imagecreatefrompng('flags/images/flagWhiteFill.png');
$mask = imagecreatefrompng('flags/images/flag_transparent.png');
imagealphablending($flag, 1);
imagealphablending($mask, 1);
imagecopy($flag, $mask, 0,0,0,0,25,43);
Header("Content-type: image/jpeg");
imagepng($flag);
?>
ImageSaveAlpha(resource, bool); made the transparent color - not transparent... dunno why :)
barbarina_sv at libero dot it
17-May-2005 10:55
I needed to draw a "pointer" image over a map, but had some problems with png image transparency.
So I created a png image with white background (not transparent) and merged it on my map, after defining white color as transparent:
<?php
$src_file = 'source.jpg';
list($src_w, $src_h, $src_t, $src_a) = getimagesize($src_file);
$ptr_file = 'pointer.png'; list($ptr_w, $ptr_h, $ptr_t, $ptr_a) = getimagesize($ptr_file);
$dst_w = 400;
$dst_h = 200;
$ptr_x = 195;
$ptr_y = 70;
$srcImage = imageCreateFromJpeg($src_file) or die ('failed imageCreateFromJpg');
$dstImage = imageCreateTrueColor($dst_w, $dst_h) or die ('failed imageCreateTrueColor');
imageCopyResampled($dstImage, $srcImage, 0, 0, 0, 0, $dst_w, $dst_h, $src_w, $src_h) or die ('failed imageCopyResampled');
$ptrImage = imageCreateFromPng($ptr_file) or die ('failed imageCreateFromPng');
$ptr_white = imageColorAllocate($ptrImage,255,255,255);
imageColorTransparent($ptrImage,$ptr_white);
imageCopyMerge($dstImage, $ptrImage, $ptr_x, $ptr_y, 0, 0, $ptr_w, $ptr_h, 100) or die ('failed imageCopyMerge');
imageJpeg($dstImage,'',100) or die ('failed imageJpeg');
imageDestroy($srcImage) or die ('failed imageDestroy(1)');
imageDestroy($dstImage) or die ('failed imageDestroy(2)');
imageDestroy($ptrImage) or die ('failed imageDestroy(3)');
?>
ingrid
04-Apr-2005 11:16
I found on the internet about a thousand copies of this "imageCopyMerge" script of Stefan.
Most of them had a copyright notice of the copyist added, but none of them had added what a starting user of PHP scripting really needs: The lines to be used in a HTML page, where the result of the script will be visible:
<?php
$sourcefile = "ORIGFILE.jpg";
$insertfile = "watermark.jpg";
$targetfile = "foto.jpg";
$transition = 30;
$pos=7;
require("watermark.php");
mergePix($sourcefile, $insertfile, $targetfile, $pos, $transition);
echo "<img src=\"$targetfile\">";
?>
I was so lucky to get these lines from someone on the internet, after I posted my question all over the world.
Most other people that replied, referred to the bookstore. But I had first read halve the (this) PHP manual, and had not found it.
Just a suggestion, but I know it will help many people getting started with PHP: When you put your scripts here, why not add those few lines needed to incorporate it into a HTML page?
jtacon at php dot net
14-Dec-2004 02:36
This example shows how to use imageCopyMerge to create a water mark function with four random positions (the corners).
<?php
function waterMark($fileInHD, $wmFile, $transparency = 50, $jpegQuality = 90, $margin = 5) {
$wmImg = imageCreateFromGIF($wmFile);
$jpegImg = imageCreateFromJPEG($fileInHD);
$wmX = (bool)rand(0,1) ? $margin : (imageSX($jpegImg) - imageSX($wmImg)) - $margin;
$wmY = (bool)rand(0,1) ? $margin : (imageSY($jpegImg) - imageSY($wmImg)) - $margin;
imageCopyMerge($jpegImg, $wmImg, $wmX, $wmY, 0, 0, imageSX($wmImg), imageSY($wmImg), $transparency);
ImageJPEG($jpegImg, $fileInHD, $jpegQuality);
}
waterMark('myImage.jpg','waterMark.gif');
?>
HTH.
Javier Tac
|