Я динамически генерирую изображение формы изображения из загруженного пользователем звукового файла, используя сценарий, на котором я основываюсь: http://andrewfreiday.com/2010/04/29/generating-mp3-waveforms-with-php/
Сценарий отлично работает в моей среде разработки Windows 7, Apache2, PHP 5. Но когда я положил его на свой сервер Ubuntu Linux, Apache2 PHP 5, imagepng () выводит черный ящик.
Я искал похожие проблемы, например, почему это создает черное изображение? и удостоверились, что мои imagealphablending () и imagesavealpha () используются описанным образом. Но до сих пор не повезло. Я проверял права доступа к папке и подтвердил, что LAME может писать в правильную папку, не выдавая ошибку.
Я также попытался просто установить цвет фона на тот же цвет, что и на моих страницах, поскольку прозрачность «приятна», а не необходимость.
Во всяком случае, вот PHP, который выводит мой образ:
// want it resized? if ($width) { // resample the image to the proportions defined in the form $rimg = imagecreatetruecolor($width, $height); // save alpha from original image imagealphablending($rimg, false); imagesavealpha($rimg, true); // copy to resized imagecopyresampled($rimg, $img, 0, 0, 0, 0, $width, $height, imagesx($img), imagesy($img)); imagepng($rimg, "../img/" . $genFileName .".png"); imagedestroy($rimg); } else { imagealphablending($img, false); imagesavealpha($img, true); imagepng($img, "../img/" . $genFileName .".png"); } imagedestroy($img); echo "img/" . $genFileName . ".png"; } else { echo "An error."; }
И это Javascript, который называет это:
//pass the audio data to the server to have the wave drawn _generateWaveForm = function(_file){ //create the form data _form.append('file',_file); //mp3 to be sent to the server _form.append('height',300); //height of image to be returned _form.append('width',window.innerWidth - 20); //width of image to be returned _form.append('foreground','#FFFF51'); //color of image to be returned _form.append('background',''); //background (left empty for transparent BG) _form.append('flat',true); //setting flat to true //pass it on $.ajax({ url: "php/php-waveform-png_3.php", type: "POST", data: _form, processData: false, contentType: false, success: function(_result){_gotTheWaveForm(_result)} }); },
Я бил головой об этом в течение двух дней, любая помощь будет оценена.
Попробуйте добавить
$transparentColor = imagecolorallocatealpha($rimg, 0, 0, 0, 127); imagefill($rimg, 0, 0, $transparentColor);
в
$rimg = imagecreatetruecolor($width, $height); imagealphablending($rimg, false); imagesavealpha($rimg, true);
Целая часть:
$rimg = imagecreatetruecolor($width, $height); imagealphablending($rimg, false); imagesavealpha($rimg, true); $transparentColor = imagecolorallocatealpha($rimg, 0, 0, 0, 127); imagefill($rimg, 0, 0, $transparentColor);