So I have this problem where I'm receiving a webp,base64 image format from an api, The image does not show in ios devices but it appears in Android. So is there a solution for those who use expo and want to display webp images on ios?
And I can take another solution if it works in php since that is what I'm using as a backend.
an example of the returned string of the image
https://i.stack.imgur.com/k1yHv.png
Normally webp images are not compatible with Safari. You can check the compatibility for webp here.
What you would need to do is maybe use a service that converts the image to a working format, be it jpeg or png and use a <picture> tag. This is just an example of how to use the tag.
<picture>
<source srcset="images/logo#1x.webp" type="image/webp">
<source srcset="images/logo#1x.png" type="image/png">
<img src="images/logo#1x.png" alt="Logo">
</picture>
UPDATE
The above example was just to show you how to use the picture tag with different types of images.
As for the base64 images you could do something like this:
<picture>
<source srcset="data:image/webp;base64,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" type="image/webp">
<source srcset="data:image/jpeg;base64,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" type="image/jpeg">
<img src="data:image/jpeg;base64,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">
</picture>
Another option could be to use Modernizr to detect if the client's browser can use webp. You can check and build a Modernizr specifically for webp detection. Check it here.
What you would need to do if you have control over how the images are created/uploaded is to have a jpg/png and a webp version, and just use the corresponding versions as necessary. You do need to have both, because as I said before webp is still not compatible with every browser.
If you run the snippet you'll see that if you try to download the image it will use the webp version. If you open it from Safari it would download the jpg version.
UPDATE 2: Image conversion
As for the image conversion, what you could do is either make an image generating function that receives a webp image as a parameter and returns a jpg image.
Since you receive the image in a base64 format, you could use this topic to save the image on your server, but in a .webp format in your case. Afterwards you could use the imagecreatefromwebp() function to create a new image. Check the example at the end of that page. It converts a webp image to a jpeg.
From what I see you could do something like:
Get your API call that contains information on the image.
Check if your image exists on your server (the ideal is to create a specific folder and use the same image name).
If it exists, you return the path to the image.
If it doesn't exist, you create a .webp file from the base64 data. Then you convert it to a .jpg or a .png file depending on your needs.
You use the local image. That might also speed up your calls.
Related
Is it possible to create a temp file server side for viewing an image?
I've some images & they're displayed from server but I want to have them watermarked... Found out about the Imagick Class, used composite... It can be viewed when sent as header but I need it somehow visible for the tag.
I don't want to uses 'write image' & create a new image from the composited image. I'm trying to use it as client Side thing (I'm not familiar with JS... Yes, I'll look into it but need an alternative till then).
Another alternative that I'm aware of is I should control that WHILE uploading the images but I've already uploaded quite a few so...
Any help appreciated!
Have you tried using the function that generates your image as a src attribute for the <img /> tag?
I don't know exactly how your code is, but I am thinking the end result could be something like:
<img src="data:image/jpeg;base64,<?php echo base64_encode($image_headers); ?>">
You basically output the headers inside the image src as a base64 encoded string.
What you should keep in mind is that you should adjust the image/jpeg type to the corresponding type of your image.
For example:
For JPG, JPEG files it would be image/jpeg
For PNG files it would be image/png
For WEBP files it would be image/webp
And of course the encoded string should be an image of the corresponding format.
I'm building a little site at the moment and users can upload their own profile picture but obviously some users pictures will be png and some jpeg, does anyone know anyway to be able to accept both when using the images as a background image in css. Here is my HTML:
<div class='avatar' style='background-image: url('users/avatars/$username.jpg')'></div>
Inside the users/avatars/ folder is every users profile picture named like so: "username.jpg" or "username.png".
Here is an example of my issue: http://cl.ly/image/3W311S2v0v0t
The first post loads the users profile image because it is a jpeg but the second post hasn't loaded the profile image as it is a png.
Thanks in advance.
You can do it in CSS like this:
background-image: url('users/avatars/$username.jpg'), url('users/avatars/$username.png');
If you absolutely must keep all the logic on the client side, in Javascript, you can catch the error if the image fails to load and attempt to load the other version.
For example:
<div class='avatar'>
<img src="users/avatars/$username.jpg" onerror='this.src="users/avatars/$username.png";' />
</div>
So if the JPG is not found and returns an error, the image will then load the PNG version.
If you are using PHP you can check the file extension and serve up different HTML. Here's how to read the file extension:
How to get the file extension in PHP?
I have a question: I need to show JPG pictures, if screen width is smaller than 1024px and GIF video, if screen size is bigger.
Trick #1: There should be downloaded only one of them.
Trick #2: Can't be css background property, cos image sorce is random content of directory on server.
Trick #3: Server language is php.
If you can use JQuery to determine which image to load you can try this.
In your PHP set up the image like so:
<img data-jpg="img-url-1.jpg" data-gif="img-url-2.gif" />
The path of each image is defined in the tag as a data-attribute
Then allow your JQuery to run after the DOM loads and determine the screen size. Based on that value, set the src attribute of the <img /> to the appropriate URL.
$(function(){
if($('body').width() > 1024) { $('img').attr("src", $('img').attr("data-jpg")); }
else { $('img').attr("src", $('img').attr("data-gif")); }
});
Working Example: JSFiddle
The picture element will let you do just that (WHATWG spec).
<picture>
<source srcset="examples/images/large.gif" media="(min-width: 1024px)">
<source srcset="examples/images/default-small.jpg">
<img src="examples/images/default-small.jpg">
</picture>
As of July 2014 it's only in beta builds of browsers yet. But you can use a polyfill (i.e. some JavaScript to emulate the element in unsupported browsers): see Picturefill
Note that the img is not only a fall-back but is always needed: The source elements just provide alternative sources for the img element. For more info, see for example this guide.
I've been trying to display a gif image using PHP and have not found a solution to my problem with the research I've done. I know I can display image in HTML/CSS, but I need to use php in this case.
<html>
<?php
$img = imagecreatefromgif("http://www.mysite.com/images/timer.gif");
?>
<img src="<?= $img ?>" alt="timer" />
</html>
That code resides in a php doc on my server. I can tell the code is working because an icon of a torn image displays on my site, and when I attempt to save the torn icon image to desktop, the automatic file name appears as "Resource id.html"?
I read somewhere that creating gifs with Photoshop CS5 (as I did) uses a different frame separator sequence, \x00\x21, instead of the official standard \x00\x2C. The guy then said he uses pattern "#\x00\x21\xF9\x04.{4}\x00(\x2C|\x21)#s" to bypass that issue but I have no idea how/where to implement that or if that is even my issue (tried a different gif from internet and had same display problem). Thoughts? Thank you.
Imagecreatefromgif() returns an image resource, which you can't use in this way.
Have your PHP script output the image data, with the correct headers (see example here http://php.net/manual/en/function.imagecreatefromgif.php).
Then you can call your script just like you would any other image:
<img src="http://www.mysite.com/images/generate_image.php" alt="timer" />
Before I explain, you may want to take a quick look at my thumbnail generation code: http://pastebin.com/XAPPcUyZ
I pass several image types through this script: jpeg,jpg,gif,png
All types create a 220px wide thumbnail like they should, the problem arrises when the script runs into an animated .gif image - when attempting to make a thumbnail for the gif it outputs something like this: http://i.imgur.com/oh50z.gif where the image appears tiled when a proper thumbnail should look more like this: http://whatimg.com/i/mhsnf4_thumb.gif.
If I remove 'interlace -line' the animated gif's generate thumbnails without any issue, however I would like to leave this in so that the other file formats are interlaced for faster loading. Is there a way to run interlace without breaking animated gifs like this? If there isn't how can I go about detecting if a gif is animated and running a non-interlaced convert on it instead?