问题
I'm trying to capture a local web page with imagegrabscreen but I only get a black screenshot. I tried almost every solution from questions here on SO and others sites and nothing works.
I'm using and done the following:
- Windows 7 64bit
- Wamp 2.2a 64bit
- PHP 5.3.8
- gd2 (version: "bundled 2.0.34 compatible") is installed and enabled.
- Allowed the apache service to interact with the desktop.
- I don't have a secondary display or anything.
<?php
$im = imagegrabscreen();
imagepng($im, "myscreenshot.png");
imagedestroy($im);
?>
And all I get is a black image 1024x768 png.
回答1:
You can do it. I did this. I didn't use WAMP. I used everything separate. I have all PHP, MySQL and Apache setup.
Here are the steps.
Stop the Apache server service. You can do this by invoking
NET STOP Apache2.2
or you can open the
services.msc
then stop it.Copy the
Apache2.2
folder out ofC:\
. Put it somewhere where you have full access. LikeDocuments
or in other drive. I put it inK:
. To be sure you have full access,- Recursively get ownership of the Apache directory.
- Make sure You have
Full control
marked tick on security tab of theApache2.2
folder. - This new Apache's configuration file
httpd.conf
will contain a lot of hardcoded paths. LikeC:\apache software foundation\apache2.2
. Just replace those with your new path. In my case it wasK:\Apache2.2
.
At this moment your Apache Server Service should be stopped. So 80 port will not be blocked. And you'll have your own Apache at your own territory (directory).
Open a console window and go to your Apache home where
htdocs
folder resides along with some other folders usingcd
- Run
bin\httpd.exe
. This means you are running Apache. You have full access to your desktop. You can do anything, so dohttpd.exe
Open your web page. With following code.
<?php header("Content-type: image/png"); $im = imagegrabscreen(); imagepng($im); imagedestroy($im); exit(0); ?>
You'll see the image.
回答2:
This is from a comment on the php.net manual page for imagegrabscreen(); try it and see if it fixes the issue, it sounds like what you're running into:
For this to work your Apache service must be set to 'Allow service to interact with desktop' otherwise you will just get a blank image.
To actually make the change:
- Run the command
services.msc
as Admin. - Find the Apache service in the list, right click and select Properties
- Click the Log On tab
- Change the service to use a local system account if it isn't already
- Check the box that says
Allow this service to interact with the desktop
. - Restart the Apache service.
回答3:
If you are having trouble with imagegrabscreen() you may want to try a windows command line tool to capture the screen like boxcutter. Then use the PHP exec() function to call it. ex:
<?php
$exec = exec('boxcutter -f image.png'); // -f is full screen option
来源:https://stackoverflow.com/questions/8919550/capture-image-with-imagegrabscreen-and-wamp