PDA

View Full Version : سوال: imagegrabwindow



sara.67
چهارشنبه 10 خرداد 1391, 11:42 صبح
میخواستم ببینم چطوری میشه با imagegrabwindow از کل صفحه عکس گرفت؟

Unique
چهارشنبه 10 خرداد 1391, 14:29 عصر
اگه بخوای از همین تابع استفاده کنی خوب یک نمونه کد که کار میکنه توی خود سایت php هست :

header('Content-type: image/jpeg');
$browser = new COM("InternetExplorer.Application");
$handle = $browser->HWND;
$browser->FullScreen = true;
$browser->Visible = true;
$browser->Navigate("http://www.php.net");

while ($browser->Busy) {
com_message_pump(4000);
}
$im = imagegrabwindow($handle, 0);
$browser->Quit();
imagejpeg($im);
imagedestroy($im);

این کد کار میکنه ولی فقط یک قلق کوچیک داره و اگه این قلق را انجام ندی برات یک صفحه سیاه میاره ! قلقش اینه که باید اون web server ی که ازش استفاده میکنی حالا چه Apache و چه IIS را برای Windows Service مربوطش مقدار Allow Service to interact with desktop را فعال کنی ! یادت هم باشه service را restart کنی که عمل کنه ! یک عکس از پنجره مربوطه attach کردم.

اما این روش فقط توی windows کار میده و توی هاستینگ های Sahred هم 99.9% این option غیر فعاله یا ممکنه پالت رنگ را گذاشته باشن روی 16 Color که اینجوری کلی ضایع میشه ! ولی توی Virtual Server های ویندوز عملی هست و میتونی ازش استفاده کنی ! برای لینوکس کلا کار نمیکنه !

ولی برای دوستانی که بعدا ممکنه این تاپیک ها را بخونن ! بهترین روش را که خودم استفاده کردم معرفی میکنم !
یه برنامه ای هست به نام phantomjs که میتونید از اینجا (http://code.google.com/p/phantomjs/) هم در موردش بخونید و هم دانلودش کنید ! کلا باید بگم این برنامه واقعا خداست ! هر کاری از یک Browser ساخته است را انجام میده !
برای استفاده هم از طریق php یک فایل js بهش میدین و با توجه به دستوراتی که در زیر میارم بهتون یک Screenshot کامل و تر و تمیز میده ! هم توی ویندوز و هم لینوکس قابل استفاده هستش.

اما توی فایل js چی بنویسیم ؟ من برای اینکه نخوایم هر بار فایل js را با php تولید کنیم اون را جوری نوشتم که argument بگیره !


var page = require('webpage').create(),
address, output, wt, ht;

address = phantom.args[0];
output = phantom.args[1];
wt = phantom.args[2];
ht = phantom.args[3];
page.viewportSize = { width: wt, height: ht };
page.open(address, function (status) {
if (status !== 'success') {
console.log('Unable to load the address!');
phantom.exit();
} else {
window.setTimeout(function () {
page.render(output);
phantom.exit();
}, 200);
}
});

بعدش کافیه این خط را بدیم به command از طریق php :

phantomjs yaghout.js http://www.yaghout.net yaghout.png 800 600

imanitc
دوشنبه 19 فروردین 1392, 07:09 صبح
دوست عزيز راستش من هنوز متوجه نشدم ميشه يه مثال ساده از نحوه استفادش بزني ممنون ميشم اگر ممکن يه مثال کامل بذاريد از اينکلود ها بذاريد

Unique
دوشنبه 19 فروردین 1392, 17:19 عصر
من خیلی کامل توضیح دادم ! چی را متوجه نمیشین ؟
اول مطمئن بشین phantomjs روی سرور ok هست ، بعدش بیاین اون کدهای javascript که دادم را بریزین توی یک فایل اسمش را بزارین مثلا screenshot.js ،‌حالا کافیه با استفاده از exec یا هر تابعی که دسترسی به shell میده این را اجرا کنید :


phantomjs screenshot.js http://www.website.com screenshot.png 800 600

آرگمان ها هم که معلومه چیه ،‌آدرس سایت و نام فایلی عکس سایت و طول و عرض مورد نظر شما !
کجاش مشکل داره ؟

imanitc
سه شنبه 20 فروردین 1392, 06:44 صبح
شرمنده "اول مطمئن بشین phantomjs روی سرور ok هست" اين بخش متوجه نشدم بقيه اش اوکي فقط نصب اين روي سرور يا هاست يا همونکه منظورتون متوجه نشدم اگر توضيح بيشتري بدين ممنون ميشم

Unique
سه شنبه 20 فروردین 1392, 19:42 عصر
اگه از سرویس های shared استفاده میکنید اول ازشون بپرسین که این برنامه را دارند یا نه ! بعدش اگه نداشتند خیلی خیلی خیلی محترمانه براشون توضیح بدین چیه و یه جورایی براشون یک قابلیت به حساب میاد! شاید براتون نصب کردن.

اگه vps داری هم که حله از اینجا (http://phantomjs.org/download.html) package یا source را بگیرین نصب کنین. کلا این خواسته ها از جمله خواسته شما باید روی vps یا dedicated باشه و روی سیستم های shared معمولا چون دنبال stability خیلی بالا هستند زیر بارش نمیرند.

imanitc
دوشنبه 26 فروردین 1392, 13:13 عصر
من از phantomjs استفاده کردم جواب داد فقط عکس هايي توليد ميکنه خيلي بزرگه در حقيقت سايز صفحه سايت ميخاستم عکس هاي بند انگشتي با سايزي که من ميدم توليد کنه چيکار بايد کرد ؟

Unique
دوشنبه 26 فروردین 1392, 16:40 عصر
من از phantomjs استفاده کردم جواب داد
روی سرور shared یا local یا vps ؟


عکس هايي توليد ميکنه خيلي بزرگه در حقيقت سايز صفحه سايت ميخاستم عکس هاي بند انگشتي با سايزي که من ميدم توليد کنه
خوب با توابع gd تغییر سایز بده ! جستجو کنین توی انجمن کلی مثال هست.

imanitc
سه شنبه 27 فروردین 1392, 06:35 صبح
روي سرور شخصي در حقيقت لوکالي هست خودم راش انداختم .براي ريسايز عکس کد پيدا کردم ميخاستم ببينم خود اين برنامه نميتونه کوچيک توليد کنه چون اينطوري هم وقت گيره هم حجم بالا ؟

Unique
سه شنبه 27 فروردین 1392, 14:59 عصر
بجای ۶۰۰ × ۸۰۰ یک سایز دیگه بدین !

imanitc
چهارشنبه 28 فروردین 1392, 08:47 صبح
اين کار و کردم همون کار خودش ميکنه انگار نه انگار ! :لبخند:

Unique
چهارشنبه 28 فروردین 1392, 18:43 عصر
wt و ht را عوض کردین یا argument دادین به جاوا اسکرپیت ؟ هر دو را چک کنید ! شاید argument را درست ارسال نمیکنید ! میتونید سایز را دستی توی فایل js اصلاح کنید که از argument ها نگیره !

imanitc
پنج شنبه 29 فروردین 1392, 07:40 صبح
عزیز هر دو کا رکردم هر سایزی که سایت مقصد باشه عکس به همون سایز تولید میشه کار به اندازه داده شده نداره اصلا