Итак, эта функция работает почти идеально, но с jpeg она не работает, с jpg работает нормально, я думаю, потому что бит расширения файла я не уверен.
Кто-нибудь может увидеть, где я ошибся? Я также думаю получить расширение файла, прочитав обратное до точки, чтобы убедиться, что в файле нет других точек. Некоторые идеи по этому поводу будут приветствоваться.
function watermark($OriginalFileUpload,$DestinationWaterMarkedFile)
{
$OutPutFile = $DestinationWaterMarkedFile;
$imagesource = $OriginalFileUpload;
$File_Extention = explode(".", $imagesource); // this will fail if some file has two dots
$File_Extention = end($File_Extention);
$File_Extention = strtolower($File_Extention);
if($File_Extention == ".gif") $New_Image = @imagecreatefromgif($imagesource);
if($File_Extention == ".jpg") $New_Image = @imagecreatefromjpeg($imagesource);
if($File_Extention == ".png") $New_Image = @imagecreatefrompng($imagesource);
if($File_Extention == ".jpeg") $New_Image = @imagecreatefromjpeg($imagesource);
$watermark = imagecreatefrompng('Logo.png');
$wm_x = imagesx($watermark);
$wm_y = imagesy($watermark);
$img_x = imagesx($New_Image);
$img_y = imagesy($New_Image);
$wm_scale = 6; // 2 = 1/2
$wm_w = $img_x/$wm_scale;
$wm_aspect = $wm_y/$wm_x;
$wm_h = (int) ($wm_aspect * $wm_w);
$margin_scale = 6; // 2 = 1/2
$margen_right = $wm_w/$margin_scale;
$margen_bottom = $wm_h/$margin_scale;
$dst_x = $img_x - $wm_w - $margen_right;
$dst_y = $img_y - $wm_h - $margen_bottom;
imagecopyresized ($New_Image, $watermark, $dst_x, $dst_y, 0, 0, $wm_w, $wm_h, $wm_x, $wm_y);
imagejpeg($New_Image,$OutPutFile,100,NULL); // writes the watermarked file to the Marked folder
imagedestroy($New_Image);
}