I have a working script for image uploading that is storing image data in binary format into mysql and when retrieving i am using header(content-type...).Is there any way to add some text contents to the page where the http header is going.
Short Answer: No
If you send an image via Content-Type then the browser expects the Content-Type. But you can dynamically add text to the image with the GD or Image Magick library. Nevertheless it is not very performant to store images in mysql.
I think a better solution would be to store all the images in a directory, and create a page that shows the selected image + the text you want to add. So output that page as HTML, not as an image (so not setting Content-Type to image).
Better save the images in a folder, in database just store their location.
Try the imagecreatefromstring() method, documentation available in http://in2.php.net/imagecreatefromstring.
Related
Think stock images. You have a full-size original that can only be downloaded after purchase. You only want to have that image once on your server, at full-size. But you want to display that image in various places in smaller sizes (responsively reduced for mobile devices as well).
I've got various pieces of this puzzle, but have not been able to make them all work together:
With TimThumb or CImage I can resize the images server-side, and using jQuery I can dynamically change the image source based on the user's screen size.
With PHP and .htaccess I can place the image files outside of the webroot and route a spoof URL containing image name to the PHP file that will read the actual image and send a header with the image data. Fine.
But TimThumb and CImage work with the real image URLs and they test to make sure that the given URL is the actual file path of the image.
If I could send the actual image data to the image resizing script rather than the URL to the image, it should work out from there. Since the PHP script would be reading the image data, I could check to see that the user has been given the proper credentials before doing the read.
Are there any other solutions you can think of besides hacking TimThumb or CImage or writing my own custom image resizing script?
Thank you
The answer just came to me.
With .htaccess, route all images through the image processing script. On the first line of the image processing script I will include my own custom script. My custom script will check the GET parameters against the actual image to determine if the user has the credentials to be served the image being requested at the size it is being requested.
If so, let the image processing script continue, if not, exit out or change the GET parameters to that the image processing script serves a placeholder image.
VoilĂ !
I need to save a random image from website to my computer. I know how to save images with PHP (I use curl), but I can't properly save random (dynamic) images.
Let's say that website (somesite.com) has some text content and IMG tag which looks like <img src='somesite.com/image.php'> and displays a random image. If I use browser, I can simply right-click and select "Save Image", so the image that I see on the screen will be saved (and they both will be the same).
However, if I use curl to open somesite.com (because I need to grab image description as well) and then use curl again to open somesite.com/image.php, images will be different (because a random one is selected every time user requests image.php).
Put simply, if somesite.com has text "this is rose", image.php will display a rose, and everything will look fine on browser. But if I use curl to open site, it may have text "this is tulip" and when I request image.php to save that image, another image will be displayed. How do I get exactly the same image saved that is displayed when first request is sent?
I guess it should be cached somewhere, or what?
It's not cached anywhere you can most likely reach. The best way to do this would be to put the randomizing into the calling file, so something like <img src='somesite.com/image.php?data=<?php echo $someRandomValue; ?>'>. You'd then use this data parameter to generate the same image every time this image is requested with that same data parameter. Of course: if there are multiple variables that affect the image, you can add more parameters to the url or simply put them in an array and pass it along base64 encoded.
Is it possible to display some php content within an HTML image (say display on the screen of an iPhone where iPhone being an image)
Well, if you just want to overlay text on an image, why create an image at all.
you can use css background image(iphone in this case) for a div and the insert your phpp content as a child of that div. Using proper css styling and positioning, you will get your desired look. Its simple and less server consuming than going the image creation way.
You could generate your own image on the server using the GD library to overlay your content onto the image and then send that to the client.
You can use CSS to achieve the same effect, without requiring any server processing; however, it must be an image, you might want to check out the image processing library that allows you to manipulate images using PHP http://php.net/manual/en/book.image.php.
Is there any way to show an image without its path. I mean not using HTML tag, I'd like to use PHP to show image. Because if I use HTML, someone can save or share that image.
Edit: I'm sorry about my question is not clear. I don't mean preventing saving image. I mean not showing the file path "/path/to/image.jpg" on URI or HTML. Because I don't want user copy and share the link which contains that image right on my website. The only way to share that image is to "Save Image As" and share it. Anyway thank you all.
This is my solution:
<?php
$image = 'new.png';
$content = file_get_contents($image);
header('Content-Type: image/jpeg');
echo $content; exit();
If the browser can view it, the user can save it. There's no way around that rule.
The only exception to this is if you recreate the image using 1x1 pixel divs of the colour of each pixel in the image, which is extremely heavy-handed and only usable in the slightest when the image is very small.
Even if you output the image with PHP, it will need to use HTML. There is no way to prevent a user from saving an image.
You could try using the image as a background-image with CSS, which will prevent non-advanced users from saving the image, but anyone who knows how to inspect the DOM or read CSS won't have any issue saving it.
Consider this - by the time a user sees the image on a page, their browser has already downloaded the file to the user's hard drive.
This is my solution:
<?php
$image = 'new.png';
$content = file_get_contents($image);
header('Content-Type: image/jpeg');
echo $content; exit();
You can give base64 of your image as src in <img> tag.
Example:
<img src="data:image/png;base64,--your 64--" alt="Red dot" />
As dtbarne explained any advanced user can get the image. However people do several things to prevent this form average users.
Disabling right click
Show in a popup with no tool bar
Set images with CSS to hide the path in as we use in <img src = "">
Load images using javascript
Generate dynamic images using PHP. It need check authentication and timestamp before generating the image.
There may be other ways too. Just for your consideration.
rendering anything in the page needs HTML in some way. this also means that it IS visible somewhere in the code - some directly visible, some require a debug tool to intercept.
you can make it impossible for people to steal the image in the following ways (some not ideal but does the job)
use flash/silverlight as a frame - though not ideal, it does help you prevent those who right-click and save. you can't view the flash source either.
use a background image - size a div enough to fit the image in it (since divs rely on explicit dimensions or children's dimensions to stretch it). the url is viewable on the CSS (unless it's dynamically placed)
use an image that has a "shield" - to do this, create a container div and place your image in it. in the same container, have a div that covers the image (absolute position, z-high z-index). this prevents the "right-click save" method. but the image path is in the source (unless it's dynamically placed as well)
you might think of canvas, but canvas is like a bitmap (therefore a picture still) so still a no-go from there.
all of which are not a fool-proof method. the only way you can avoid people from stealing owning images is to actually use a watermark. they may save but can't own it since it will have a watermark (like your name) across it.
If the client can see your image, users can save it anyway.
Hi I want to put an image into the PDF file I'm making using TCPDF. It is an image generated by an online API so I cannot store it on my webhost. But when I put the image URL for creating I'm getting error while generating the PDF file.
TCPDF can only use images saved on your webhost - local files, as it needs a physical path to the image in order to include it in the document. The only way you could grab an image from HTTP to be used for TCPDF would be to use cURL, which is something I have only used for text and html, but have no experience grabbing images with, but I'm sure there's a way it can be done.