PDA

View Full Version : سوال: حل مشکل چاپ زمان روی عکس ؟؟؟



mosi2007
دوشنبه 18 اردیبهشت 1391, 23:08 عصر
سلام دوستان
این کد منه برای چاپ زمان روی عکس
من الان میخوام که فقط ثانیه و دقیقه روی عکسم چاپ بشه ولی تو این کد ساعت هم چاپ میشه
به این شکل در میاد
00:00:00
که می خوام کد فقط دقیقه و ثانیه رو چا کنه به این صورت
00:00
ممنون میشم دوستان کمک کنند


$videofile="video.flv";
ob_start();
passthru("ffmpeg.exe -i $videofile 2>&1");
$duration=ob_get_contents();

ob_end_clean();
$search='/Duration: (.*)./';
$duration=preg_match($search, $duration, $matches, PREG_OFFSET_CAPTURE, 3);
$dur = $matches[1][0];


$path = "$image_id.jpeg";
$image = imagecreatefromjpeg($path);
$font = 'arial.ttf';
$text_color = imagecolorallocate($image, 255, 255, 255);
imagettftext($image, 10, 0, 127, 85, $text_color, $font, $dur);

//imagestring($image, 5, 290, 290, $text, $text_color);
imagejpeg($image, "$image_id.jpeg",200);
imagejpeg($image);
imagedestroy($image);

MMSHFE
دوشنبه 18 اردیبهشت 1391, 23:19 عصر
یه print_r از $matches بگیرین ببینید کدوم مواردش به دردتون میخوره. همونها رو ترکیب کنید و توی dur$ بکار ببرین.

mosi2007
دوشنبه 18 اردیبهشت 1391, 23:37 عصر
یه print_r از $matches بگیرین ببینید کدوم مواردش به دردتون میخوره. همونها رو ترکیب کنید و توی dur$ بکار ببرین.

فقط اینو چاپ کرد
array()

MMSHFE
سه شنبه 19 اردیبهشت 1391, 00:00 صبح
نتیجه میگیریم preg_match شما هیچ یافته ای نداشته و لذا matches$ خالیه. بخاطر همین به مشکل برخوردین. اگه میشه کل محتوای duration$ رو هم چاپ کنید ببینیم توش چیه و چه pattern خاصی باید براش بنویسیم.

mosi2007
سه شنبه 19 اردیبهشت 1391, 00:09 صبح
نتیجه میگیریم preg_match شما هیچ یافته ای نداشته و لذا matches$ خالیه. بخاطر همین به مشکل برخوردین. اگه میشه کل محتوای duration$ رو هم چاپ کنید ببینیم توش چیه و چه pattern خاصی باید براش بنویسیم.

وفتی به همین صورت زمان روی عکس چاپ میشه این کد زمانو درست تشخیص میده و مثلا یه ویدیو 5 ثانیه ای رو به ای ن صورت نمایش میده




00:00:05.8,


الان هم که شما گفتید محتوای duration$ رو چاپ کنم اونم چاپ کردم و مقدارش 1 است

MMSHFE
سه شنبه 19 اردیبهشت 1391, 08:46 صبح
نه منظورم قبل از دستور preg_match هست. همونجا که از بافر میخونید، چاپش کنید تا ببینیم چیه و چه Pattern خاصی باید براش بنویسیم.

mosi2007
سه شنبه 19 اردیبهشت 1391, 10:58 صبح
نه منظورم قبل از دستور preg_match هست. همونجا که از بافر میخونید، چاپش کنید تا ببینیم چیه و چه Pattern خاصی باید براش بنویسیم.

FFmpeg version SVN-r6179, Copyright (c) 2000-2004 Fabrice Bellard configuration: --extra-cflags=-I/static/include --extra-ldflags=-L/static/lib --enable-memalign-hack --enable-mp3lame --enable-xvid --enable-a52 --enable-libogg --enable-vorbis --enable-faac --enable-faad --enable-x264 --enable-pp --enable-amr_wb --enable-amr_nb --enable-avisynth --enable-gpl libavutil version: 49.0.0 libavcodec version: 51.13.0 libavformat version: 50.5.0 built on Sep 5 2006 22:41:30, gcc: 3.4.5 (mingw special) Seems that stream 0 comes from film source: 30000.00 (90000/3) -> 24.00 (24/1) Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'video.mp4': Duration: 00:00:05.8, start: 0.000000, bitrate: 268 kb/s Stream #0.0(und): Video: h264, yuv420p, 480x352, 24.00 fps(r) Stream #0.1(eng): Audio: aac, 44100 Hz, stereo Must supply at least one output file ÿØÿàJFIFÿþ>CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), default quality ÿÛC


یه سری چیزای کد شده هم بود که فکر کنم بدرد نمیخوره

MMSHFE
سه شنبه 19 اردیبهشت 1391, 18:25 عصر
خوب واقعاً preg_match لازم نیست. مثال:

$duration = substr(substr(substr($duration, strpos($duration, 'Duration: ') + 10), strpos($duration, ':') + 1), 0, strpos($duration, ','));
کد فوق فقط دقیقه و ثانیه رو نشون میده.
موفق باشید.

mosi2007
سه شنبه 19 اردیبهشت 1391, 21:01 عصر
خوب واقعاً preg_match لازم نیست. مثال:<br />

$duration = substr(substr(substr($duration, strpos($duration, 'Duration: ') + 10), strpos($duration, ':') + 1), 0, strpos($duration, ','));<br />
کد فوق فقط دقیقه و ثانیه رو نشون میده.<br />
موفق باشید.<br />
<br />

نه اصلا زمان چاپ نمیکنه اینو چاپ میکنه

v420p, 450*352, 24.00fp
اینم کدم



<?php
$videofile="video.mp4";
ob_start();
passthru("ffmpeg.exe -i $videofile 2>&1");
$duration=ob_get_contents();

ob_end_clean();


$duration = substr(substr(substr($duration, strpos($duration, 'Duration: ') + 10), strpos($duration, ':') + 1), 0, strpos($duration, ','));



$path = "45.jpeg";
$image = imagecreatefromjpeg($path);
$font = 'arial.ttf';
$text_color = imagecolorallocate($image, 0, 255, 255);
imagettftext($image, 10, 0, 7, 55, $text_color, $font, $duration);

//imagestring($image, 5, 290, 290, $text, $text_color);
imagejpeg($image, "$image_id.jpeg",200);
imagejpeg($image);
imagedestroy($image);
?>

MMSHFE
چهارشنبه 20 اردیبهشت 1391, 08:41 صبح
شرمنده سریع نوشتم فرصت نشد تست کنم. این کار میکنه:


$duration = substr($duration, strpos($duration, 'Duration: ') + 10);
$duration = substr($duration, strpos($duration, ':') + 1);
$duration = substr($duration, 0, strpos($duration, ','));
echo $duration;

موفق باشید.

mosi2007
دوشنبه 01 خرداد 1391, 22:27 عصر
دوستان تو سایتم وقتی زمان را روی عکس چاپ میکنم فونت به رنگ سفید است
تا جایی که پیش نمایش فیلم رنگ تیره داشته باشه مشکلی پیش نمیاد ولی وقتی یه پیش نمایشی داشته باشم که رنگش هم روشن باشه زمان که روی پیش نمایش چاپ میشه ناخوانا میشه مثل این
87326
تو بعضی سایتها که ابتدا زمان را روی یه قاب مشکی چاپ میکنن و بعد روی عکس این کار رو میخواستم انجام بدم
مثل این
87327

که اول یه قاب مشکی با پسوند jpeg به اندازه طول و عرض ( 00:00 ) درست کردم و زمان را روی این قاب مشکی چاپ کردم که بعد این قابه مشکی که زمان هم روش چاپ شده رو بزارم روی عکس
که اینجا به یه مشکل برخوردم
و اونم اینه که این قاب مشکی که به بار زمان روش چاپ شده و برای بار دوم یعنی پیش نمایش بعدی نمیتونم ازش استفاده کنم و از اون طرف هم که نمیتونم دوباره یه قاب مشکی برای پیش نمایش های بعدی درست کنم
موندم از چه روشی استفاده کنم
ممنون میشم دوستان کمک کنند

mosi2007
سه شنبه 02 خرداد 1391, 02:13 صبح
اگه متوجه نشدین و درست منظورمو نرسوندم بی زحمت بگید تا بهتر بپرسم

MMSHFE
سه شنبه 02 خرداد 1391, 08:23 صبح
این قاب مشکی که یه بار زمان روش چاپ شده و برای بار دوم یعنی پیش نمایش بعدی نمیتونم ازش استفاده کنم و از اون طرف هم که نمیتونم دوباره یه قاب مشکی برای پیش نمایش های بعدی درست کنم
موندم از چه روشی استفاده کنم
این قسمت رو متوجه نشدم. منظورتون از اینکه گفتین یه بار زمان روش چاپ شده و برای بار دوم نمیشه ازش استفاده کرد چیه؟ چرا نمیشه بار دوم ازش استفاده کنید؟ چرا نمیشه دوباره یه قاب مشکی روش بگذارین؟

mosi2007
سه شنبه 02 خرداد 1391, 10:41 صبح
این قسمت رو متوجه نشدم. منظورتون از اینکه گفتین یه بار زمان روش چاپ شده و برای بار دوم نمیشه ازش استفاده کرد چیه؟ چرا نمیشه بار دوم ازش استفاده کنید؟ چرا نمیشه دوباره یه قاب مشکی روش بگذارین؟

خب من یه دونه از این قاب مشکی با پسوند jpeg دارم با ابعاد مثلا 10*10 یعنی تو سایت گذاشتم و وقتی که یک بار زمان روش چاپ شد دیگه برای همیشه تایم زمان روش حک شده و پا ک که نمیشه مثل اینکه یه ویدیو زمانش اینه 00:09
خب من میام این زمان رو روی قاب مشکی چاپ میکنم و این قاب مشکی رو هم روی پیش نمایش میچسبونم خب این بار اول که مشکلی بوجود نمیاد
حالا ویدیو دومی اپلود میشه با زمان مثلا 01:06 من اینو میخوام روی قاب مشکی چاپ کنم ولی نمیشه دیگه چون الان قاب مشکی زمان 00:09 روش چاپ شده
امیدوارم که این دفعه خوب منظورمو رسونده باشم

MMSHFE
سه شنبه 02 خرداد 1391, 12:17 عصر
خوب دوست عزیز چرا این کار رو میکنید؟ خودتون میتونید قاب رو بسازید:


<?php
$im = imagecreatefromjpeg('movie_thumb.jpg');
$black = imagecolorallocate($im, 0, 0, 0);
$white = imagecolorallocate($im, 255, 255, 255);
$duration = '00:09';
imagefilledrectangle($im, imagesx($im) - 50, imagesy($im) - 10, imagesx($im), imagesy($im), $black);
imagestring($im, 5, imagesx($im) - 45, imagesy($im) - 8, $duration, $white);
imagejpeg($im, 'movie_thumb.jpg');
?>

البته کد فوق فقط یک مثال بود. موفق باشید.

mosi2007
سه شنبه 02 خرداد 1391, 16:33 عصر
خوب دوست عزیز چرا این کار رو میکنید؟ خودتون میتونید قاب رو بسازید:


<?php
$im = imagecreatefromjpeg('movie_thumb.jpg');
$black = imagecolorallocate($im, 0, 0, 0);
$white = imagecolorallocate($im, 255, 255, 255);
$duration = '00:09';
imagefilledrectangle($im, imagesx($im) - 50, imagesy($im) - 10, imagesx($im), imagesy($im), $black);
imagestring($im, 5, imagesx($im) - 45, imagesy($im) - 8, $duration, $white);
imagejpeg($im, 'movie_thumb.jpg');
?>

البته کد فوق فقط یک مثال بود. موفق باشید.
خیلی ممنون همینو میخواستم
فقط اینکه نمیشه به لبه های این قاب یه radios داد مثل css و یخورده گردش کرد چون اینطوری خیلی لبه ها ی قاب تیزه ؟

MMSHFE
سه شنبه 02 خرداد 1391, 19:37 عصر
از این تابع استفاده کنید:


<?php
function imagefillroundedrect($image, $x1, $y1, $x2, $y2, $radius, $color) {
// Draw the middle cross shape of the rectangle
imagefilledrectangle($image, $x1, $y1 + $radius, $x2, $y2 - $radius, $color);
imagefilledrectangle($image, $x1 + $radius, $y1, $x2 - $radius, $y2, $color);
// Now fill in the rounded corners
$diameter = $radius * 2;
imagefilledellipse($image, $x1 + $radius, $y1 + $radius, $diameter, $diameter, $color);
imagefilledellipse($image, $x1 + $radius, $y2 - $radius, $diameter, $diameter, $color);
imagefilledellipse($image, $x2 - $radius, $y2 - $radius, $diameter, $diameter, $color);
imagefilledellipse($image, $x2 - $radius, $y1 + $radius, $diameter, $diameter, $color);
}
?>

پارامترها:
image : کنترل کننده تصویر
x1 و y1 : مختصات گوشه بالا و سمت چپ
x2 و y2 : مختصات گوشه پایین و سمت راست
radius : شعاع لبه گرد
color : رنگ
مثال:

imagefillroundedrect($im, imagesx($im) - 50, imagesy($im - 10), imagesx($im), imagesy($im), $black);
منبع (http://www.web-max.ca/PHP/misc_10.php)
موفق باشید.