php - 是否可以在不重新上传的情况下旋转 [并保存] 已上传的图像?
问题描述
我的网站有一个工作正常的图片上传脚本。如果需要,我已经包含了 exif_read_data 来读取和更正旋转。这行得通。尽管如此,我想添加在上传后更正图像旋转的可能性,但无需从计算机重新上传文件。但是通过旋转已经上传的图像。
我现在所做的是创建一个包含旋转值 0,90,180,-90 的下拉列表。我从我的电脑中选择一张图片,然后上传它,同时发送旋转值,让它以新的旋转角度上传。这也有效。
但我想要的是,已经上传的图像是否可以被纠正而无需从我的电脑中重新选择
编辑 ==> 我不是说如何旋转图像,这是很容易做到的,确实是使用 Jquery。我的意思是旋转并将此旋转再次保存到服务器,但不涉及从我的计算机重新选择文件
任何人建议以什么方式看?我用谷歌搜索了很多/stackoverflow,但似乎找不到很多。
谢谢
编辑 2=>
执行发送的表单的 php 页面有一个看起来像这样的代码。
if(!$fileNamephoto){
if($rotationAngle != "0"){
$degrees = $rotationAngle;
header('Content-type: image/jpeg');
$filename = $originalImage;
$source = imagecreatefromjpeg($filename) or notfound();
$rotate = imagerotate($source,$degrees,0);
imagejpeg($rotate);
imagedestroy($source);
imagedestroy($rotate);
}
其中 $originalImage 是已上传图片的路径。应该应用旋转的那个。
我想检查是否从下拉列表中选择了新图像,如果没有,是否设置了旋转。如果是,我希望使用旋转角度上传/保存原始文件名
但也许(我现在想)它不需要遍历整个图像上传脚本,因为它已经准备好调整大小、压缩和重命名等等。
解决方案
您可以创建 css 类,例如:
.rotate-90{
-webkit-transform: rotate(90deg);
-moz-transform: rotate(90deg);
-o-transform: rotate(90deg);
-ms-transform: rotate(90deg);
transform: rotate(90deg);
}
.rotate-180{
-webkit-transform: rotate(180deg);
-moz-transform: rotate(180deg);
-o-transform: rotate(180deg);
-ms-transform: rotate(180deg);
transform: rotate(180deg);
}
.rotate-270{
-webkit-transform: rotate(270deg);
-moz-transform: rotate(270deg);
-o-transform: rotate(270deg);
-ms-transform: rotate(270deg);
transform: rotate(270deg);
}
和你的下拉菜单:
<select class=".rotation">
<option value="0">No Rotation</option>
<option value="90">Rotate 90 deg</option>
<option value="180">Rotate 180 deg</option>
<option value="270">Rotate 270 deg</option>
</select>
并在您的下拉值更改时应用它:
$('.rotation').on('change',function(){
$('img').removeClass('rotate-0);
$('img').removeClass('rotate-90);
$('img').removeClass('rotate-180);
$('img').removeClass('rotate-270);
if($(this).val() !== 0) $('img').addClass(`rotate-${$(this).val()}`)
});
或者,您可以直接使用 javascript 应用,而不是创建 css 类。
更新:考虑您对问题的编辑。好吧,当页面加载时您当然有 imageId 以及下拉列表的选定值,因此您可以创建一个 php 文件,该文件从数据库(或保存它的任何位置)获取图像并对其应用旋转:
$.post('your-new-rotation-page-php', {rotation: $('.rotation').val(), id: yourImageId} ,function(){ /**/ });
推荐阅读
- avro - 如何在 GoogleCloudStorageToBigQueryOperator 的气流作业中设置 useAvroLogicalTypes?
- java - 如何配置 Gradle 应用程序以使用 SLF4J 和 Log4J 2 实现?
- sass - MDX 动态日期过滤器
- javascript - 如何在 React 的组件范围内编辑全局范围的变量
- python - Gekko 返回不正确的成功解决方案
- asp.net-mvc - 如何将 Base64 字符串传递给 MVC 控制器
- python - 如何检查 gdb.Type
- neo4j - Neo4j 创建具有多个标签/属性的边
- javascript - 无法在反应中显示数据但能够在控制台中看到
- python - 使用 tkinter 在终端中运行 python 代码时遇到问题