我正在开发一个照片上传应用程序,需要允许用户从相机上传原始文件(这些不是 jpeg),并让服务器自动创建它们的 jpeg 版本。我目前安装了 Imagemagick,但我认为那里没有办法做到这一点。
相机总是以新的原始格式出现,所以我正在寻找一些相对最新的东西,命令 php exec() 也是一个选项。
有人对原始转换有什么建议吗?
我正在开发一个照片上传应用程序,需要允许用户从相机上传原始文件(这些不是 jpeg),并让服务器自动创建它们的 jpeg 版本。我目前安装了 Imagemagick,但我认为那里没有办法做到这一点。
相机总是以新的原始格式出现,所以我正在寻找一些相对最新的东西,命令 php exec() 也是一个选项。
有人对原始转换有什么建议吗?
实际上,正如您在此列表中看到的,ImageMagick 确实支持 RAW 照片:http ://www.imagemagick.org/script/formats.php (例如 .NEF 尼康照片和 .CR2 佳能照片)。
.CR2 照片的示例代码:
$im = new Imagick( 'source.CR2' );
$im->setImageFormat( 'jpg' );
$im->writeImage( 'result.jpg' );
$im->clear();
$im->destroy();
甚至更容易
sudo apt-get install ufraw ufraw-batch
然后要么使用 UFRaw(参见手册页),要么使用使用 UFRaw 的 ImageMagick
convert mypic.RAF mypic.jpeg
您可以使用 exec() 上传,并且当您转换为 jpg 时,您可以使用 jpg“提示”来加快速度 - 它应该只读取尽可能多的数据来创建 jpg 而不是整个文件。
从内存中,定义出现在图像之前的转换之后:
convert -define jpeg:size=128x128 input.raw -thumbnail 128x128 output.jpg
Imagemagick 使用 Ufraw 处理 RAW 文件,我发现对于我的 CR2 文件,我需要稍微调整其中一个文件。我想是否支持文件取决于 Ufraw delagate。
我认为三星 RAW 文件是个问题,但不仅仅是 Imagemagick
这是我修改的 delegates.xml 文件,将这一行的 4 更改为 6:
<delegate decode="dng:decode" stealth="True" command="dcraw.exe -6 -w -O "%u.ppm" "%i""/>
我使用 Imagick 做了完全相同的页面。我成功地将 TIFF、DNG、CR2 文件转换为 JPEG。在执行此操作之前,您必须参考此视频https://www.youtube.com/watch?v=q3c6O85_LoA&index=29&list=LLkmyV_KYAFxKz9gE_fEbjTA&t=23s
这是一段带有 JavaScript、HTML 和 PHP 的代码:
<?php
$file=$_FILES['file'];
$fname=$_FILES['file']['name'];
$ftmp=$_FILES['file']['tmp_name'];
$ferr=$_FILES['file']['error'];
$check=explode(".",$fname);
$ext=end($check);
if(!$ftmp)
{
//echo"ERROR: Please select a file first!";
?>
<html>
<script>
alert("ERROR: Please select a file first!");
location.href='/Image/1.html';
</script>
</html>
<?php
}
else if(!preg_match("/\.(tif|tiff|cr2|pef|nef|dng)$/i",$fname))
{
//echo"ERROR: File is not in TIF,TIFF,CR2,PEF,NEF or DNG</br>";
//echo"File is of $ext format";
?>
<html>
<script>
alert("ERROR: File is not in TIF,TIFF,CR2,PEF,NEF or DNG");
location.href='/Image/1.html';
</script>
</html>
<?php
}
else
{
//echo".$ext File uploaded";
?>
<html>
<script>
alert("File uploaded");
</script>
</html>
<?php
$im=new Imagick($ftmp);
$im->setImageFormat('jpg');
file_put_contents("/var/www/html/Image/Converted/a.jpg",$im);//Path where converted image will be saved on localhost.
?>
<html>
<script>
function ok()
{
location.href='/Image/1.html';
}
</script>
<img src="/Image/Converted/a.jpg" height="900" width="600">
<input type=Button Value=Done onclick="ok()">
</html>
<?php
$im->clear();
$im->destroy();
}?>
HTML 代码。在操作标签中插入您的 php 文件名。
<html>
<body>
<h1 align=center>Upload image</h1>
<form action=*.php method=POST enctype='multipart/form-data'>
Please select the file:<br>
<input type=file name=file><br>
<input type=SUBMIT value=Submit>
<input type=Reset value=Reset>
</form>
</body>