PHP - Help With Video Watermark Clarity
I had a similar posting regarding positioning of a 2nd watermark on an uploaded video. I have resoled that successfully - thanks again for the help. Now, the watermarks look clear/sharp on a small screen, but when the screen is enlarged the images don't seem as sharp/clear. What is the trick? Solution? Is it to have a large image to begin with? The watermark.png currently is 98px w by 16px h. Here is a portion of the file code:
$watermark_image_full_path = "watermark.png"; // demo Video $video_time = ''; $demo_video = ''; if ($pt->config->demo_video == 'on' && !empty($data_insert['sell_video'])) { $have_demo = false; if (!empty($duration_file['playtime_seconds']) && $duration_file['playtime_seconds'] > 0) { $video_time = round((10 * round($duration_file['playtime_seconds'],0)) / 100,0); $video_time = '-t '.$video_time.' -async 1'; $have_demo = true; } } // demo Video $ffmpegCommand =''.$ffmpeg_b.' -y -i '.$video_file_full_path.' -i '.$watermark_image_full_path.' -i '.$watermark_image_full_path.' -filter_complex "scale=640:-2, scale=640:-2, overlay=10:10, overlay=170:170:enable=between(t\,5\,5+2)" -vcodec libx264 -preset '.$pt->config->convert_speed.' -crf 26 '.$video_output_full_path_240.' 2>&1'; $shell = shell_exec($ffmpegCommand); $upload_s3 = PT_UploadToS3($filepath . "_240p_converted.mp4"); $db->where('id', $insert); $db->update(T_VIDEOS, array( 'converted' => 1, '240p' => 1, 'video_location' => $filepath . "_240p_converted.mp4" )); if ($pt->config->queue_count > 0) { $db->where('video_id',$insert)->delete(T_QUEUE); } if ($video_res >= 3840) { $ffmpegCommand =''.$ffmpeg_b.' -y -i '.$video_file_full_path.' -i '.$watermark_image_full_path.' -i '.$watermark_image_full_path.' -filter_complex "scale=640:-2, scale=640:-2, overlay=10:10, overlay=170:170:enable=between(t\,5\,5+2)" -vcodec libx264 -preset '.$pt->config->convert_speed.' -crf 26 '.$video_output_full_path_4096.' 2>&1'; $shell = shell_exec($ffmpegCommand); $upload_s3 = PT_UploadToS3($filepath . "_4096p_converted.mp4"); $db->where('id', $insert); $db->update(T_VIDEOS, array( '4096p' => 1 )); // demo Video if ($pt->config->demo_video == 'on' && empty($demo_video) && $have_demo == true) { $demo_video = substr($filepath, 0,strpos($filepath, '_video') - 10).sha1(time()). "_video_4096p_demo.mp4"; $shell = shell_exec("$ffmpeg_b $video_time -y -i $video_file_full_path -vcodec libx264 -preset {$pt->config->convert_speed} -filter:v scale=3840:-2 -crf 26 ".$full_dir . $demo_video." 2>&1"); $upload_s3 = PT_UploadToS3($demo_video); $db->where('id', $insert); $db->update(T_VIDEOS, array( 'demo' => $demo_video )); } // demo Video } if ($video_res >= 2048) { $ffmpegCommand =''.$ffmpeg_b.' -y -i '.$video_file_full_path.' -i '.$watermark_image_full_path.' -i '.$watermark_image_full_path.' -filter_complex "scale=640:-2, scale=640:-2, overlay=10:10, overlay=170:170:enable=between(t\,5\,5+2)" -vcodec libx264 -preset '.$pt->config->convert_speed.' -crf 26 '.$video_output_full_path_2048.' 2>&1'; $shell = shell_exec($ffmpegCommand); $upload_s3 = PT_UploadToS3($filepath . "_2048p_converted.mp4"); $db->where('id', $insert); $db->update(T_VIDEOS, array( '2048p' => 1 )); // demo Video if ($pt->config->demo_video == 'on' && empty($demo_video) && $have_demo == true) { $demo_video = substr($filepath, 0,strpos($filepath, '_video') - 10).sha1(time()) . "_video_2048p_demo.mp4"; $shell = shell_exec("$ffmpeg_b $video_time -y -i $video_file_full_path -vcodec libx264 -preset {$pt->config->convert_speed} -filter:v scale=2048:-2 -crf 26 ".$full_dir . $demo_video." 2>&1"); $upload_s3 = PT_UploadToS3($demo_video); $db->where('id', $insert); $db->update(T_VIDEOS, array( 'demo' => $demo_video )); } // demo Video } if ($video_res >= 1920 || $video_res == 0) { $ffmpegCommand =''.$ffmpeg_b.' -y -i '.$video_file_full_path.' -i '.$watermark_image_full_path.' -i '.$watermark_image_full_path.' -filter_complex "scale=640:-2, scale=640:-2, overlay=10:10, overlay=170:170:enable=between(t\,5\,5+2)" -vcodec libx264 -preset '.$pt->config->convert_speed.' -crf 26 '.$video_output_full_path_1080.' 2>&1'; $shell = shell_exec($ffmpegCommand); any assistance is appreciated Similar TutorialsThe web video script that I'm using, and trying to modify, works successfully integrating a watermark in the upper left corner of the video file, (so that when it's downloaded, the watermark stays on the video). In the ffmpeg php file code below, the watermarking starts with this line $watermark_image_full_path = "watermark.png"; at line 275 (out of 504 - about halfway). I am wondering if there might be a way to make the watermark also display briefly in another location on the video again, maybe halfway through, when playing it.
<?php if (IS_LOGGED == false || $pt->config->upload_system != 'on') { $data = array( 'status' => 400, 'error' => 'Not logged in' ); echo json_encode($data); exit(); } else if ($pt->config->ffmpeg_system != 'on') { $data = array( 'status' => 402 ); echo json_encode($data); exit(); } else { $getID3 = new getID3; $featured = ($user->is_pro == 1) ? 1 : 0; $filesize = 0; $error = false; if (PT_IsAdmin() && !empty($_POST['is_movie']) && $_POST['is_movie'] == 1) { if (empty($_POST['movie_title']) || empty($_POST['movie_description']) || empty($_FILES["movie_thumbnail"]) || empty($_POST['stars']) || empty($_POST['producer']) || empty($_POST['country']) || empty($_POST['quality']) || empty($_POST['rating']) || !is_numeric($_POST['rating']) || $_POST['rating'] < 1 || $_POST['rating'] > 10 || empty($_POST['release']) || empty($_POST['category']) || !in_array($_POST['category'], array_keys($pt->movies_categories))) { $error = $lang->please_check_details; } // $cover = getimagesize($_FILES["movie_thumbnail"]["tmp_name"]); // if ($cover[0] > 400 || $cover[1] > 570) { // $error = $lang->cover_size; // } } else{ $request = array(); $request[] = (empty($_POST['title']) || empty($_POST['description'])); $request[] = (empty($_POST['tags']) || empty($_POST['video-thumnail'])); if (in_array(true, $request)) { $error = $lang->please_check_details; } else if (empty($_POST['video-location'])) { $error = $lang->video_not_found_please_try_again; } else if (($pt->config->sell_videos_system == 'on' && $pt->config->who_sell == 'pro_users' && $pt->user->is_pro) || ($pt->config->sell_videos_system == 'on' && $pt->config->who_sell == 'users') || ($pt->config->sell_videos_system == 'on' && $pt->user->admin)) { if (!empty($_POST['set_p_v']) || $_POST['set_p_v'] < 0) { if (!is_numeric($_POST['set_p_v']) || $_POST['set_p_v'] < 0 || (($pt->config->com_type == 0 && $_POST['set_p_v'] <= $pt->config->admin_com_sell_videos)) ) { $error = $lang->video_price_error." ".($pt->config->com_type == 0 ? $pt->config->admin_com_sell_videos : 0); } } } else { $request = array(); $request[] = (!in_array($_POST['video-location'], $_SESSION['uploads']['videos'])); $request[] = (!in_array($_POST['video-thumnail'], $_SESSION['ffempg_uploads'])); $request[] = (!file_exists($_POST['video-location'])); if (in_array(true, $request)) { $error = $lang->error_msg; } } } if (empty($error)) { $file = $duration_file = $getID3->analyze($_POST['video-location']); $duration = '00:00'; if (!empty($file['playtime_string'])) { $duration = PT_Secure($file['playtime_string']); } if (!empty($file['filesize'])) { $filesize = $file['filesize']; } $video_res = (!empty($file['video']['resolution_x'])) ? $file['video']['resolution_x'] : 0; $video_id = PT_GenerateKey(15, 15); $check_for_video = $db->where('video_id', $video_id)->getValue(T_VIDEOS, 'count(*)'); if ($check_for_video > 0) { $video_id = PT_GenerateKey(15, 15); } if (PT_IsAdmin() && !empty($_POST['is_movie']) && $_POST['is_movie'] == 1) { $thumbnail = 'upload/photos/thumbnail.jpg'; if (!empty($_FILES['movie_thumbnail']['tmp_name'])) { $file_info = array( 'file' => $_FILES['movie_thumbnail']['tmp_name'], 'size' => $_FILES['movie_thumbnail']['size'], 'name' => $_FILES['movie_thumbnail']['name'], 'type' => $_FILES['movie_thumbnail']['type'] ); $file_upload = PT_ShareFile($file_info); $thumbnail = PT_Secure($file_upload['filename'], 0); // if (!empty($file_upload['filename'])) { // $thumbnail = PT_Secure($file_upload['filename'], 0); // $upload = PT_UploadToS3($thumbnail); // } } } else{ $thumbnail = PT_Secure($_POST['video-thumnail'], 0); if (file_exists($thumbnail)) { $upload = PT_UploadToS3($thumbnail); } } $category_id = 0; $convert = true; $thumbnail = substr($thumbnail, strpos($thumbnail, "upload"), 120); // ****************************** if (PT_IsAdmin() && !empty($_POST['is_movie']) && $_POST['is_movie'] == 1) { $link_regex = '/(http\:\/\/|https\:\/\/|www\.)([^\ ]+)/i'; $i = 0; preg_match_all($link_regex, PT_Secure($_POST['movie_description']), $matches); foreach ($matches[0] as $match) { $match_url = strip_tags($match); $syntax = '[a]' . urlencode($match_url) . '[/a]'; $_POST['movie_description'] = str_replace($match, $syntax, $_POST['movie_description']); } $data_insert = array( 'title' => PT_Secure($_POST['movie_title']), 'category_id' => PT_Secure($_POST['category']), 'stars' => PT_Secure($_POST['stars']), 'producer' => PT_Secure($_POST['producer']), 'country' => PT_Secure($_POST['country']), 'movie_release' => PT_Secure($_POST['release']), 'quality' => PT_Secure($_POST['quality']), 'duration' => $duration, 'description' => PT_Secure($_POST['movie_description']), 'rating' => PT_Secure($_POST['rating']), 'is_movie' => 1, 'video_id' => $video_id, 'converted' => '2', 'size' => $filesize, 'thumbnail' => $thumbnail, 'user_id' => $user->id, 'time' => time(), 'registered' => date('Y') . '/' . intval(date('m')) ); if (!empty($_POST['buy_price']) && is_numeric($_POST['buy_price']) && $_POST['buy_price'] > 0) { $data_insert['sell_video'] = PT_Secure($_POST['buy_price']); } } else{ $link_regex = '/(http\:\/\/|https\:\/\/|www\.)([^\ ]+)/i'; $i = 0; preg_match_all($link_regex, PT_Secure($_POST['description']), $matches); foreach ($matches[0] as $match) { $match_url = strip_tags($match); $syntax = '[a]' . urlencode($match_url) . '[/a]'; $_POST['description'] = str_replace($match, $syntax, $_POST['description']); } if (!empty($_POST['category_id'])) { if (in_array($_POST['category_id'], array_keys(get_object_vars($pt->categories)))) { $category_id = PT_Secure($_POST['category_id']); } } $video_privacy = 0; if (!empty($_POST['privacy'])) { if (in_array($_POST['privacy'], array(0, 1, 2))) { $video_privacy = PT_Secure($_POST['privacy']); } } $age_restriction = 1; if (!empty($_POST['age_restriction'])) { if (in_array($_POST['age_restriction'], array(1, 2))) { $age_restriction = PT_Secure($_POST['age_restriction']); } } $sub_category = 0; if (!empty($_POST['sub_category_id'])) { $is_found = $db->where('type',PT_Secure($_POST['category_id']))->where('lang_key',PT_Secure($_POST['sub_category_id']))->getValue(T_LANGS,'COUNT(*)'); if ($is_found > 0) { $sub_category = PT_Secure($_POST['sub_category_id']); } } $continents_list = array(); if (!empty($_POST['continents-list'])) { foreach ($_POST['continents-list'] as $key => $value) { if (in_array($value, $pt->continents)) { $continents_list[] = $value; } } } $data_insert = array( 'video_id' => $video_id, 'user_id' => $user->id, 'title' => PT_Secure($_POST['title']), 'description' => PT_Secure($_POST['description']), 'tags' => PT_Secure($_POST['tags']), 'duration' => $duration, 'video_location' => '', 'category_id' => $category_id, 'thumbnail' => $thumbnail, 'time' => time(), 'registered' => date('Y') . '/' . intval(date('m')), 'featured' => $featured, 'converted' => '2', 'size' => $filesize, 'privacy' => $video_privacy, 'age_restriction' => $age_restriction, 'sub_category' => $sub_category, 'geo_blocking' => (!empty($continents_list) ? json_encode($continents_list) : '') ); if (!empty($_POST['set_p_v']) && is_numeric($_POST['set_p_v']) && $_POST['set_p_v'] > 0) { $data_insert['sell_video'] = PT_Secure($_POST['set_p_v']); } if ( ($pt->config->approve_videos == 'on' && !PT_IsAdmin()) || ($pt->config->auto_approve_ == 'no' && $pt->config->sell_videos_system == 'on' && !PT_IsAdmin() && !empty($data_insert['sell_video'])) ) { $data_insert['approved'] = 0; } } // ****************************** $insert = $db->insert(T_VIDEOS, $data_insert); if ($insert) { $delete_files = array(); if (!empty($_SESSION['ffempg_uploads'])) { if (is_array($_SESSION['ffempg_uploads'])) { foreach ($_SESSION['ffempg_uploads'] as $key => $file) { if ($thumbnail != $file) { $delete_files[] = $file; unset($_SESSION['ffempg_uploads'][$key]); } } } } if (!empty($delete_files)) { foreach ($delete_files as $key => $file2) { unlink($file2); } } if (isset($_SESSION['ffempg_uploads'])) { unset($_SESSION['ffempg_uploads']); } $data = array( 'status' => 200, 'video_id' => $video_id, 'link' => PT_Link("watch/$video_id") ); ob_end_clean(); header("Content-Encoding: none"); header("Connection: close"); ignore_user_abort(); ob_start(); header('Content-Type: application/json'); echo json_encode($data); $size = ob_get_length(); header("Content-Length: $size"); ob_end_flush(); flush(); session_write_close(); if (is_callable('fastcgi_finish_request')) { fastcgi_finish_request(); } if ($pt->config->queue_count > 0) { $process_queue = $db->getValue(T_QUEUE,'video_id',$pt->config->queue_count); } if ( (count($process_queue) < $pt->config->queue_count && !in_array($video_id, $process_queue)) || $pt->config->queue_count == 0) { if ($pt->config->queue_count > 0) { $db->insert(T_QUEUE, array('video_id' => $insert, 'video_res' => $video_res, 'processing' => 2)); } $ffmpeg_b = $pt->config->ffmpeg_binary_file; $filepath = explode('.', $_POST['video-location'])[0]; $time = time(); $full_dir = str_replace('ajax', '/', __DIR__); $video_output_full_path_240 = $full_dir . $filepath . "_240p_converted.mp4"; $video_output_full_path_360 = $full_dir . $filepath . "_360p_converted.mp4"; $video_output_full_path_480 = $full_dir . $filepath . "_480p_converted.mp4"; $video_output_full_path_720 = $full_dir . $filepath . "_720p_converted.mp4"; $video_output_full_path_1080 = $full_dir . $filepath . "_1080p_converted.mp4"; $video_output_full_path_2048 = $full_dir . $filepath . "_2048p_converted.mp4"; $video_output_full_path_4096 = $full_dir . $filepath . "_4096p_converted.mp4"; $video_file_full_path = $full_dir . $_POST['video-location']; $watermark_image_full_path = "watermark.png"; // demo Video $video_time = ''; $demo_video = ''; if ($pt->config->demo_video == 'on' && !empty($data_insert['sell_video'])) { $have_demo = false; if (!empty($duration_file['playtime_seconds']) && $duration_file['playtime_seconds'] > 0) { $video_time = round((10 * round($duration_file['playtime_seconds'],0)) / 100,0); $video_time = '-t '.$video_time.' -async 1'; $have_demo = true; } } // demo Video //$shell = shell_exec("$ffmpeg_b -y -i $video_file_full_path -vcodec libx264 -preset {$pt->config->convert_speed} -filter:v scale=426:-2 -crf 26 $video_output_full_path_240 2>&1"); $ffmpegCommand =''.$ffmpeg_b.' -y -i '.$video_file_full_path.' -i '.$watermark_image_full_path.' -filter_complex "overlay=10:10,scale=640:-2" -vcodec libx264 -preset '.$pt->config->convert_speed.' -crf 26 '.$video_output_full_path_240.' 2>&1'; $shell = shell_exec($ffmpegCommand); $upload_s3 = PT_UploadToS3($filepath . "_240p_converted.mp4"); $db->where('id', $insert); $db->update(T_VIDEOS, array( 'converted' => 1, '240p' => 1, 'video_location' => $filepath . "_240p_converted.mp4" )); if ($pt->config->queue_count > 0) { $db->where('video_id',$insert)->delete(T_QUEUE); } if ($video_res >= 3840) { //$shell = shell_exec("$ffmpeg_b -y -i $video_file_full_path -vcodec libx264 -preset {$pt->config->convert_speed} -filter:v scale=3840:-2 -crf 26 $video_output_full_path_4096 2>&1"); $ffmpegCommand =''.$ffmpeg_b.' -y -i '.$video_file_full_path.' -i '.$watermark_image_full_path.' -filter_complex "overlay=10:10,scale=640:-2" -vcodec libx264 -preset '.$pt->config->convert_speed.' -crf 26 '.$video_output_full_path_4096.' 2>&1'; $shell = shell_exec($ffmpegCommand); $upload_s3 = PT_UploadToS3($filepath . "_4096p_converted.mp4"); $db->where('id', $insert); $db->update(T_VIDEOS, array( '4096p' => 1 )); // demo Video if ($pt->config->demo_video == 'on' && empty($demo_video) && $have_demo == true) { $demo_video = substr($filepath, 0,strpos($filepath, '_video') - 10).sha1(time()). "_video_4096p_demo.mp4"; $shell = shell_exec("$ffmpeg_b $video_time -y -i $video_file_full_path -vcodec libx264 -preset {$pt->config->convert_speed} -filter:v scale=3840:-2 -crf 26 ".$full_dir . $demo_video." 2>&1"); $upload_s3 = PT_UploadToS3($demo_video); $db->where('id', $insert); $db->update(T_VIDEOS, array( 'demo' => $demo_video )); } // demo Video } if ($video_res >= 2048) { //$shell = shell_exec("$ffmpeg_b -y -i $video_file_full_path -vcodec libx264 -preset {$pt->config->convert_speed} -filter:v scale=2048:-2 -crf 26 $video_output_full_path_2048 2>&1"); $ffmpegCommand =''.$ffmpeg_b.' -y -i '.$video_file_full_path.' -i '.$watermark_image_full_path.' -filter_complex "overlay=10:10,scale=640:-2" -vcodec libx264 -preset '.$pt->config->convert_speed.' -crf 26 '.$video_output_full_path_2048.' 2>&1'; $shell = shell_exec($ffmpegCommand); $upload_s3 = PT_UploadToS3($filepath . "_2048p_converted.mp4"); $db->where('id', $insert); $db->update(T_VIDEOS, array( '2048p' => 1 )); // demo Video if ($pt->config->demo_video == 'on' && empty($demo_video) && $have_demo == true) { $demo_video = substr($filepath, 0,strpos($filepath, '_video') - 10).sha1(time()) . "_video_2048p_demo.mp4"; $shell = shell_exec("$ffmpeg_b $video_time -y -i $video_file_full_path -vcodec libx264 -preset {$pt->config->convert_speed} -filter:v scale=2048:-2 -crf 26 ".$full_dir . $demo_video." 2>&1"); $upload_s3 = PT_UploadToS3($demo_video); $db->where('id', $insert); $db->update(T_VIDEOS, array( 'demo' => $demo_video )); } // demo Video } if ($video_res >= 1920 || $video_res == 0) { //$shell = shell_exec("$ffmpeg_b -y -i $video_file_full_path -vcodec libx264 -preset {$pt->config->convert_speed} -filter:v scale=1920:-2 -crf 26 $video_output_full_path_1080 2>&1"); $ffmpegCommand =''.$ffmpeg_b.' -y -i '.$video_file_full_path.' -i '.$watermark_image_full_path.' -filter_complex "overlay=10:10,scale=640:-2" -vcodec libx264 -preset '.$pt->config->convert_speed.' -crf 26 '.$video_output_full_path_1080.' 2>&1'; $shell = shell_exec($ffmpegCommand); $upload_s3 = PT_UploadToS3($filepath . "_1080p_converted.mp4"); $db->where('id', $insert); $db->update(T_VIDEOS, array( '1080p' => 1 )); // demo Video if ($pt->config->demo_video == 'on' && empty($demo_video) && $have_demo == true) { $demo_video = substr($filepath, 0,strpos($filepath, '_video') - 10).sha1(time()) . "_video_1080p_demo.mp4"; $shell = shell_exec("$ffmpeg_b $video_time -y -i $video_file_full_path -vcodec libx264 -preset {$pt->config->convert_speed} -filter:v scale=1920:-2 -crf 26 ".$full_dir . $demo_video." 2>&1"); $upload_s3 = PT_UploadToS3($demo_video); $db->where('id', $insert); $db->update(T_VIDEOS, array( 'demo' => $demo_video )); } // demo Video } if ($video_res >= 1280 || $video_res == 0) { //$shell = shell_exec("$ffmpeg_b -y -i $video_file_full_path -vcodec libx264 -preset {$pt->config->convert_speed} -filter:v scale=1280:-2 -crf 26 $video_output_full_path_720 2>&1"); $ffmpegCommand =''.$ffmpeg_b.' -y -i '.$video_file_full_path.' -i '.$watermark_image_full_path.' -filter_complex "overlay=10:10,scale=640:-2" -vcodec libx264 -preset '.$pt->config->convert_speed.' -crf 26 '.$video_output_full_path_720.' 2>&1'; $shell = shell_exec($ffmpegCommand); $upload_s3 = PT_UploadToS3($filepath . "_720p_converted.mp4"); $db->where('id', $insert); $db->update(T_VIDEOS, array( '720p' => 1 )); // demo Video if ($pt->config->demo_video == 'on' && empty($demo_video) && $have_demo == true) { $demo_video = substr($filepath, 0,strpos($filepath, '_video') - 10).sha1(time()) . "_video_720p_demo.mp4"; $shell = shell_exec("$ffmpeg_b $video_time -y -i $video_file_full_path -vcodec libx264 -preset {$pt->config->convert_speed} -filter:v scale=1280:-2 -crf 26 ".$full_dir . $demo_video." 2>&1"); $upload_s3 = PT_UploadToS3($demo_video); $db->where('id', $insert); $db->update(T_VIDEOS, array( 'demo' => $demo_video )); } // demo Video } if ($video_res >= 854 || $video_res == 0) { //$shell = shell_exec("$ffmpeg_b -y -i $video_file_full_path -vcodec libx264 -preset {$pt->config->convert_speed} -filter:v scale=854:-2 -crf 26 $video_output_full_path_480 2>&1"); $ffmpegCommand =''.$ffmpeg_b.' -y -i '.$video_file_full_path.' -i '.$watermark_image_full_path.' -filter_complex "overlay=10:10,scale=640:-2" -vcodec libx264 -preset '.$pt->config->convert_speed.' -crf 26 '.$video_output_full_path_480.' 2>&1'; $shell = shell_exec($ffmpegCommand); $upload_s3 = PT_UploadToS3($filepath . "_480p_converted.mp4"); $db->where('id', $insert); $db->update(T_VIDEOS, array( '480p' => 1 )); // demo Video if ($pt->config->demo_video == 'on' && empty($demo_video) && $have_demo == true) { $demo_video = substr($filepath, 0,strpos($filepath, '_video') - 10).sha1(time()) . "_video_480p_demo.mp4"; $shell = shell_exec("$ffmpeg_b $video_time -y -i $video_file_full_path -vcodec libx264 -preset {$pt->config->convert_speed} -filter:v scale=854:-2 -crf 26 ".$full_dir . $demo_video." 2>&1"); $upload_s3 = PT_UploadToS3($demo_video); $db->where('id', $insert); $db->update(T_VIDEOS, array( 'demo' => $demo_video )); } // demo Video } if ($video_res >= 640 || $video_res == 0) { // $shell = shell_exec("$ffmpeg_b -y -i $video_file_full_path -vcodec libx264 -preset {$pt->config->convert_speed} -filter:v scale=640:-2 -crf 26 $video_output_full_path_360 2>&1"); $ffmpegCommand =''.$ffmpeg_b.' -y -i '.$video_file_full_path.' -i '.$watermark_image_full_path.' -filter_complex "overlay=10:10,scale=640:-2" -vcodec libx264 -preset '.$pt->config->convert_speed.' -crf 26 '.$video_output_full_path_360.' 2>&1'; $shell = shell_exec($ffmpegCommand); $upload_s3 = PT_UploadToS3($filepath . "_360p_converted.mp4"); $db->where('id', $insert); $db->update(T_VIDEOS, array( '360p' => 1, )); // demo Video if ($pt->config->demo_video == 'on' && empty($demo_video) && $have_demo == true) { $demo_video = substr($filepath, 0,strpos($filepath, '_video') - 10).sha1(time()) . "_video_360p_demo.mp4"; $shell = shell_exec("$ffmpeg_b $video_time -y -i $video_file_full_path -vcodec libx264 -preset {$pt->config->convert_speed} -filter:v scale=640:-2 -crf 26 ".$full_dir . $demo_video." 2>&1"); $upload_s3 = PT_UploadToS3($demo_video); $db->where('id', $insert); $db->update(T_VIDEOS, array( 'demo' => $demo_video )); } // demo Video } // demo Video if ($pt->config->demo_video == 'on' && empty($demo_video) && $have_demo == true) { $demo_video = substr($filepath, 0,strpos($filepath, '_video') - 10).sha1(time()) . "_video_240p_demo.mp4"; $shell = shell_exec("$ffmpeg_b $video_time -y -i $video_file_full_path -vcodec libx264 -preset {$pt->config->convert_speed} -filter:v scale=426:-2 -crf 26 ".$full_dir . $demo_video." 2>&1"); $upload_s3 = PT_UploadToS3($demo_video); $db->where('id', $insert); $db->update(T_VIDEOS, array( 'demo' => $demo_video )); } // demo Video if (file_exists($_POST['video-location'])) { unlink($_POST['video-location']); } pt_push_channel_notifiations($video_id); $_SESSION['uploads'] = array(); } else{ $db->insert(T_QUEUE, array('video_id' => $insert, 'video_res' => $video_res, 'processing' => 0)); $db->where('id', $insert); $db->update(T_VIDEOS, array( 'video_location' => $_POST['video-location'] )); } exit(); } } else { $data = array( 'status' => 400, 'message' => $error_icon . $error ); } } Any guidance with this is appreciated not sure what i am doing wrong but when i try to call this watermark function i get "query failed" "included failed" errors which doesnt happen unless i call the function. maybe someone can sort out my code so that it uploads the watermark correctly http://www.plus2net.com/php_tutorial/gd-water.php upoad.php <?php include("include/session.php"); $caption = $_POST['caption']; $target_path = "gallery/"; $target_path = $target_path . basename( $_FILES['uploadedfile']['name']); $file_path = basename( $_FILES['uploadedfile']['name']); $file_size = basename( $_FILES['uploadedfile']['size']); $username = $session->username; $time = $session->time; if ($file_size > '4194304'){ //echo 'error '. $file_size; header('Location: gallery.php?id=error'); } else { if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) { $location_height=300; // Location of water mark $location_width=300; // Location of water mark $add="gallery/$file_path"; // Source directory location $add2="destination/$file_name"; // Destination directory location $water_img="wtt7.gif"; // Water Image file //echo "The file ". basename( $_FILES['uploadedfile']['name']). //" has been uploaded<br><br>Link: <a href=\"http://www.thetastingroomokc.com/gallery/". basename( $_FILES['uploadedfile']['name']) ."\">http://www.thetastingroomokc.com/gallery/". basename( $_FILES['uploadedfile']['name']) ."</a>"; mysql_query("INSERT INTO gallery VALUES ('', '$username', '$time', '$caption' , '$file_path' )"); //echo $file_size.' is how big your file is. It was transferred.'; header('Location: gallery.php'); } else{ // echo "There was an error uploading the file, please try again!"; } } ?> hi guys i need some help i am trying to create a resized image with a watermark, from an uploaded image.. the image is getting uploaded and resized but the watermark doesnt appear correct. instead of a transparent watermark, there's a black square in it's place. this is my code Code: [Select] $tempfile = $_FILES['filename']['tmp_name']; $src = imagecreatefromjpeg($tempfile); list($origWidth, $origHeight) = getimagesize($tempfile); // creating png image of watermark $watermark = imagecreatefrompng('../imgs/watermark.png'); // getting dimensions of watermark image $watermark_width = imagesx($watermark); $watermark_height = imagesy($watermark); // placing the watermark $dest_x = $origWidth / 2 - $watermark_width / 2; $dest_y = $origHeight / 2 - $watermark_height / 2; imagecopyresampled($src, $watermark, $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height, $origWidth, $origHeight); imagealphablending($src, true); imagealphablending($watermark, true); imagejpeg($src,$galleryPhotoLocation,100); // $galleryPhotoLocation is correct. the image gets uploaded successfully.. I want my watermark password field to say password and not be written in all asterisks. I know that this is because I am using type=password on my input field. I'm not sure how to make the type be text while displaying the password in asterisks. You can see the problem on my site at http://network.jasonbiondo.com Here is the code: Code: [Select] <div id="username"> <input id="username-field" class="loginFields" type="text" name="username" title="Username" value="Username" /> <script type="text/javascript"> //<![CDATA[ document.getElementById('username-field').onfocus = function() { if (this.value == 'Username') this.value=''; }; document.getElementById('username-field').onblur = function() { if (this.value == '') this.value = 'Username'; }; //]]> </script> </div> <div id="password"> <input id="password-field" class="loginFields" type="password" name="password" title="Password" value="Password" /> <script type="text/javascript"> //<![CDATA[ document.getElementById('password-field').onfocus = function() { if (this.value == 'Password') this.value=''; }; document.getElementById('password-field').onblur = function() { if (this.value == '') this.value = 'Password'; }; //]]> </script> </div> what am i doing wrong? my watermark function won't work but i am calling the function right i think. if (move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) { watermark($file_path,$watermark,'png'); mysql_query("INSERT INTO gallery VALUES ('', '$username', '$time', '$caption' , '$file_path' )"); //echo $file_size.' is how big your file is. It was transferred.'; header('Location: gallery.php'); } Hi I am using this script for water marking images from here http://911-need-code-help.blogspot.com/2008/11/watermark-your-images-with-another.html which works great. I also tried using this resizer here http://911-need-code-help.blogspot.com/2008/10/resize-images-using-phpgd-library.html because it works great too but trying to get both of them to work together wasn't working for me. The 2 codes are very similar and the farthest I got was being able to produce 2 images at the same time "one watermarked and one resized" I could never actually get it to resize and then watermark. I ended up using another piece of code that i found and and it seems to work great for resizing after the image is watermarked but not before. I keep trying to resize it before the watermark and nothing works for me. Anyone know what i can do to achieve this? or get the 2 scripts in the links above to flow together? Here is my working code for watermarking then resizing. //-------------------------------- // CREATE WATERMARK FUNCTION //-------------------------------- define( 'WATERMARK_OVERLAY_IMAGE', 'http://localhost/d.png' ); define( 'WATERMARK_OVERLAY_OPACITY', 70 ); 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, floor(($source_width - $overlay_width) / 2), floor(($source_height - $overlay_height) / 2), 0, 0, $overlay_width, $overlay_height, WATERMARK_OVERLAY_OPACITY ); /* Right corner 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', '/xampp/htdocs/admin/original/' ); define( 'PROCESSED_IMAGE_DESTINATION', '/xampp/htdocs/images/' ); define( 'THUMBNAIL_IMAGE_DESTINATION', '/xampp/htdocs/images/' ); 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; } $rand=time(); $dash = "-"; $uploaded_file_path = UPLOADED_IMAGE_DESTINATION . $rand . $dash . $temp_file_name; $processed_file_path = PROCESSED_IMAGE_DESTINATION . $rand . $dash . preg_replace( '/\\.[^\\.]+$/', '.jpg', $temp_file_name ); // $uploaded_image_path = UPLOADED_IMAGE_DESTINATION . $temp_image_name; move_uploaded_file( $temp_file_path, $uploaded_file_path ); $result = create_watermark( $uploaded_file_path, $processed_file_path ); //This is where its does the resize.. include 'test.php'; $image = new Resize_Image; $image->new_width = 350; $image->new_height = 350; $image->image_to_resize = "$processed_file_path"; // Full Path to the file $image->ratio = true; // Keep Aspect Ratio? // Name of the new image (optional) - If it's not set a new will be added automatically $image->new_image_name = 'sunset_wallpaper_thumbnail'; //Path where the new image should be saved. If it's not set the script will output the image without saving it $image->save_folder = '/xampp/htdocs/images/'; $process = $image->resize(); if($process['result'] && $image->save_folder) { echo 'The new image ('.$process['new_file_path'].') has been saved.'; } //End of resize if ( $result === false ) { return false; } else { return array( $uploaded_file_path, $processed_file_path ); } } //-------------------------------- // END OF FUNCTIONS //-------------------------------- $result = process_image_upload( 'photo' ); if ( $result === false ) { echo '<br>An error occurred during file processing.'; } else { echo "<h1>Submission Successful</h1>"; echo "You will now be redirected back to the last page you visited. Thanks!"; //echo "<meta http-equiv='refresh' content='2;URL=/admin/'>"; } I want to watermark a simple TEXT line on some images (ie: "SAMPLE") I have successfully created a working code and using imagettftext and the PHP manual, I have summized that the coordinates 0,0 will essentially place the beginning of the text at the top left corner of my image. This would remain the same regardless of the image size or shape. Are there coordinates that will consistently designate the lower-right corner? Do the coordinates change for horizontals and verticals; large files and small?
This topic has been moved to Third Party PHP Scripts. http://www.phpfreaks.com/forums/index.php?topic=319561.0 Hello everyone. I have a report generator for my database and for some reason it is putting a watermark of our company logo in the middle of each page. I have attached the code for the beginning of the script that makes the PDF generator work. Maybe you can find where it should be removed because I am not finding it.
<style> table{ display: table; border-collapse: collapse; border:1.5px solid #74b9f0; font-size: 12.5px; width:100%; } .no_border tr,td{ border:none; border:hidden; /* background:none; */ border:1.5px solid white; } table tr:nth-child(even) { /*(even) or (2n 0)*/ background: #f1f6ff; } table tr:nth-child(odd) { /*(odd) or (2n 1)*/ background: white; } th{text-align:left;font-weight:normal;color:#990a10;width:110px;border:0.4px solid #74b9f0;height:24px;} .title{color:black;} td{border:0.4px solid #74b9f0;height:24px;} .label{text-align:left;font-weight:normal;color:#990a10;width:110px;height:24px;} </style> <?php $StudentInfo = StudentInfo::model()->findByPk($student_transaction[0]->student_transaction_student_id); $AcademicTermPeriod = AcademicTermPeriod::model()->findByPk($student_transaction[0]->academic_term_period_id); $AcademicTerm = AcademicTerm::model()->findByPk($student_transaction[0]->academic_term_id); if($student_transaction[0]->student_transaction_nationality_id != null) $Nationality = Nationality::model()->findByPk($student_transaction[0]->student_transaction_nationality_id); else $Nationality = new Nationality; $Batch = Batch::model()->findByPk($student_transaction[0]->student_transaction_batch_id); $Course = Course::model()->findByPk($student_transaction[0]->course_id); if($student_transaction[0]->student_transaction_languages_known_id != null) $LanguagesKnown = LanguagesKnown::model()->findByPk($student_transaction[0]->student_transaction_languages_known_id); if($student_transaction[0]->student_transaction_student_address_id != null) $StudentAddress = StudentAddress::model()->findByPk($student_transaction[0]->student_transaction_student_address_id); else $StudentAddress = new StudentAddress; if($student_transaction[0]->student_transaction_parent_id != null || $student_transaction[0]->student_transaction_parent_id != 0) $parent = ParentLogin::model()->findByPk($student_transaction[0]->student_transaction_parent_id); else $parent = new ParentLogin; ?> <h3 class="title">CALL RECORDS SUMMARY</h3> <table class="no_border"> </table> I've got a script that auto-puts watermark on images code: Code: [Select] <?php //get stuff $src = $_SERVER['DOCUMENT_ROOT'].'/'.$_GET['src']; $watermarkSRC = 'img/wm.png'; header('Content-type: image/jpeg'); //create watermark $watermark = imagecreatefrompng($watermarkSRC); //wm dimensions $watermark_width = imagesx($watermark); $watermark_height = imagesy($watermark); $image = imagecreatetruecolor($watermark_width, $watermark_height); //border $border=25; //some crappy logic if(strpos($src,'.gif') !== false) { $image = imagecreatefromgif($src); } elseif(strpos($src,'.jpeg') !== false || strpos($src,'.jpg') !== false) { $image = imagecreatefromjpeg($src); } elseif(strpos($src,'.png') !== false) { $image = imagecreatefrompng($src); } else { exit("Your image is not a gif, jpeg or png image. Sorry."); } //image dimensions $width=ImageSx($image); $height=ImageSy($image); //lets make a border $img_adj_height=$height+$border; $square=imagecreatetruecolor($width,$img_adj_height); //border + image imagecopyresampled($square, $image, 0, 0, 0, 0, $width, $img_adj_height, $width, $img_adj_height); //watermark placement $dest_x = $width - $watermark_width - 5; $dest_y = $img_adj_height - $watermark_height - 5; //border + watermark imagecolortransparent($watermark,imagecolorat($watermark,0,0)); imagecopyresampled($square, $watermark, $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height, $watermark_width, $watermark_height); //wrap up imagejpeg($square, "", 100); imagedestroy($image); imagedestroy($watermark); ?> and I want to change it so the watermark will be in a border with the transparent or white background instead of black how can I do that? Hi there, Can you guys/girls tell me if this is even possible: - take pictures with eye-fi card in the camera, which uploads the images to a server - on the server, automatically add a watermark, and post them on 3 different facebookpages Right now users log in and upload an image to the website. I want every image that is uploaded to be watermarked with a particular logo. Is this possible? Any hints or tips will be appreciated. Thank you. Hi Guys, I'm going to try and watermark my uploaded images with a small logo (placed onto the original image) so they are all watermarked, is there any tutorials anyone can recommend to do this? i can't seem to find any online. thanks for any help guys Graham hello, i have read topic on the internet that says i have to buy an adobe media interactive server and moyea so that you can have a video on the internet (without using you tube). how can i install a software like this to the webhost? thanks everyone. Hello, i just joined the forums, nice forum . Well im looking for a solution. I want download the videos from a site, but i cant find a solution how to get the location of the video, cause its dynamic. Here is a sample video: http://www.collegehumor.com/video:1946215 And here is the link to the video: http://8.media.collegehumor.cvcdn.com/21/12/a8cc907f5e150fe77ce7c0c47b1b9d31.mp4 That link i got via a FIREFOX Addon called "DownloadHelper" this addon finds the location with help of http headers. So is it possible way to find the videos with php? Thanks for help. hi all How we can read the id of an element tag on the html page to use it in a sql query for selecting a particular record. or else how we can simply connect a link to jwplayer to play in the specific area defined for it. That we just click that link and it will play a video in that area. how it is implement in php Hi, I want to restrict my registered user to see video only once per day... Can anyone guide me how can i do this with php??? Thanks Hiya! Is it possible to play an avi or mpg video file with php? If not is there any other recommeded scripts out there be it jquery, ajax, js ect that will do this? Many thanks, James. In my php web site the video player appears and plays the video. In Chrome you can right click on the player screen and choose 'inspect element' etc, but another choice is 'Copy video URL'. How can I block that, or hide (or disguise/rename) video URLs?
Hi,i m confused php developer (beginner bt i wnt to do advance things with php and mysql) i want to make video website for myself and i also have 10000s of video in my pc and can any one help me to complete this project 1. when user clik on some video thumbnail the video player(jw or flow player) pop-up and start the video without go to different page(if possible) 2.do i need to upload all my video first to my server or i upload it with php mysql then how is it possible to link and make thumbnail of all the 10000s videos with video player so all the video will play without error and i knw i cant make these 10000s videos thumbnails and video link and pages for each videos so how can i start my thing please help me in this a BIG THANKS in advance |