I decided to go through this for you. Below is a step-by-step guide on creating a request using ajax.
What creates the code below can be seen at http://tomsfreelance.com/stackoverflow/imageDownloadLoading/main.php
Files, including PHP, are included in the directory ( http://tomsfreelance.com/stackoverflow/imageDownloadLoading/ )
Step 1: Customize the form. We will keep it simple.
<form name="resizeImage"> <select id="image" onChange="com.demo.updateImage();"> <option value="img1.jpg">img1.jpg</option> <option value="img2.jpg">img2.jpg</option> <option value="img3.jpg">img3.jpg</option> </select> <input type="text" id="tint" placeholder="Tint" onKeyUp="com.demo.updateTint();"> <input type="button" id="download" value="Download" onClick="com.demo.downloadImage();" /> <br /> <img style="max-width: 400px; max-height: 400px;" src="img1.jpg" id="preview"> <div id="color"></div> </form>
Step 2: add javascript / ajax
<script> var com = {}; com.demo = {}; com.demo.loading = false; com.demo.loadingBox = null; com.demo.loadingStage = 1; com.demo.updateImage = function() { $('#preview').prop('src', $('#image').val()); com.demo.updateTint(); } com.demo.updateTint = function() { $('#color').css( { 'width': $('#preview').outerWidth() + 'px', 'height': $('#preview').outerHeight() + 'px', 'background-color': $('#tint').val(), 'z-index' : 10, 'position': 'absolute', 'left': $('#preview').position().left, 'top' : $('#preview').position().top, 'opacity' : 0.4 }); } com.demo.doLoading = function() { if (com.demo.loading) { if (com.demo.loadingBox == null) { com.demo.loadingBox = $('<div id="loading">Loading</div>').appendTo('body').css({ "position" : "absolute", "width" : "100px", "left" : "50px", "top" : "50px", "border" : "5px solid #000000", "padding" : "10px", "z-index" : "20", "background-color" : "#FFFFFF" }); } else com.demo.loadingBox.css({ 'display' : 'block' }); com.demo.loadingStage = ++com.demo.loadingStage % 3; var string = "Loading"; for (var x = 0; x < com.demo.loadingStage; x++) { string += "."; } com.demo.loadingBox.text(string); setTimeout(function() { com.demo.doLoading(); }, 1000); } else { com.demo.loadingBox.css({ 'display' : 'none' }); } } com.demo.downloadImage = function() { var data = {}; data.img = $('#image').val(); data.tint = $('#tint').val(); </script>
Step 3. Create a PHP page that processes the file.
<?php function hex2rgb($hex) { $hex = str_replace("#", "", $hex); if(strlen($hex) == 3) { $r = hexdec(substr($hex,0,1).substr($hex,0,1)); $g = hexdec(substr($hex,1,1).substr($hex,1,1)); $b = hexdec(substr($hex,2,1).substr($hex,2,1)); } else { $r = hexdec(substr($hex,0,2)); $g = hexdec(substr($hex,2,2)); $b = hexdec(substr($hex,4,2)); } $rgb = array($r, $g, $b); //return implode(",", $rgb); // returns the rgb values separated by commas return $rgb; // returns an array with the rgb values } if (isset($_POST['img'])) { $im = imagecreatefromjpeg($_POST['img']); $color = (empty($_POST['tint'])) ? hex2rgb("#000000") : hex2rgb($_POST['tint']); if (imagefilter($im, IMG_FILTER_COLORIZE, $color[0], $color[1], $color[2])) { header('Content-Description: File Transfer'); header("Content-type: application/octet-stream"); header("Content-disposition: attachment; filename=download.jpg"); imagejpeg($im, "download.jpg"); echo "download.php"; } }
Step 4: Create a Download Page.
<?php header('Content-Description: File Transfer'); header("Content-type: application/octet-stream"); header("Content-disposition: attachment; filename=download.jpg"); readfile("download.jpg");