我想要在上传图片前先让用户预览图片,我想要得到图片的宽度和高度进行resize,我的代码如下:
var pic = new Image();
var pw,ph;
pic.onload = function(){
pw = pic.width;
ph = pic.height;
console.log(pw,ph);
// other code...
}
pic.src = url;
我在桌面端的很多浏览器都测过,都挺正常的。后来开始测移动端,在iphone上时而出问题时而正常。反复测试后发现问题出在使用iphone摄像头拍摄的照片,这些照片尺寸是3264x2448,但是其实照片的尺寸是2448x3264,宽和高正好是相反的,后来我把照片导到电脑里,的确尺寸应该是2448x3264。我不知道这种情况是怎么导致的~~~~~
黄舟2017-04-10 14:29:42
悄悄告诉你,做这个功能会坑死你。
目前我用了约 30k 的代码来实现该功能。具体效果可以看 http://qingpai.baidu.com
常规解决方案
思路就基本这样了
解决方案网上都有现成的,自己动手搜一搜就能找到。
https://github.com/QzoneTouch/commonWidget 这个地址包含了一部分解决方案。
PHP中文网2017-04-10 14:29:42
你拍照时,iPhone 会根据重力感应决定你的照片的宽和高,举个例子,你如果横着拍照,得到的照片的宽高比是4:3,如果是竖着拍照的话宽高比就成了3:4了,你可以测试一下看看。
怪我咯2017-04-10 14:29:42
前端:
https://github.com/gokercebeci/canvasResize
在后端也是一样转嘛(php):
$exif = exif_read_data($picAddr);
$image = imagecreatefromjpeg($picAddr);
if($exif['Orientation'] == 3) {
$result = imagerotate($image, 180, 0);
imagejpeg($result, $picAddr, 100);
} elseif($exif['Orientation'] == 6) {
$result = imagerotate($image, -90, 0);
imagejpeg($result, $picAddr, 100);
} elseif($exif['Orientation'] == 8) {
$result = imagerotate($image, 90, 0);
imagejpeg($result, $picAddr, 100);
}
isset($result) && imagedestroy($result);
imagedestroy($image);