Foxtable(狐表)用户栏目专家坐堂 → [求助]压缩照片大小


  共有3724人关注过本帖树形打印复制链接

主题:[求助]压缩照片大小

帅哥哟,离线,有人找我吗?
12397522011
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:91 积分:715 威望:0 精华:0 注册:2019/10/20 0:27:00
[求助]压缩照片大小  发帖心情 Post By:2020/9/30 22:41:00 [只看该作者]

1、代码目的
     将一个大文件夹中,多个文件夹中的照片尺寸,由900*675调整为291*218;
以下照片为调整结果:

图片点击可在新窗口打开查看此主题相关图片如下:qq截图20200930223050.png
图片点击可在新窗口打开查看

图片点击可在新窗口打开查看此主题相关图片如下:qq截图20200930223022.png
图片点击可在新窗口打开查看
2、错误提示
运行的过程中时不时的会出现以下问题,并且每次出现错误的地方不同,貌似是随机的,但也有少数情况会全部完成;
比如;大文件夹中有10个文件夹,运行的时候出错的位置可能在第4个或者第6个文件夹,不固定,但有时候会全部转换完成,出错原因应该与照片没啥关系。

图片点击可在新窗口打开查看此主题相关图片如下:qq截图20200930220049.png
图片点击可在新窗口打开查看
3、具体代码
 '选择文件夹
Dim dlg As New FolderBrowserDialog
If dlg.ShowDialog = DialogResult.Ok Then
    'MessageBox.Show("你选择的目录是:" & dlg.SelectedPath,"提示")
End If
Dim Names As New List(Of String)
For Each dir As String In FileSys.GetDirectories(dlg.SelectedPath)
    Names.Add( dir)
Next
'调整照片大小 保存在缩略图文件夹中
If Names.Count > 0 Then
    '多个文件夹操作
    For Each dir As String In FileSys.GetDirectories(dlg.SelectedPath)  'dir桥文件名路径,子目录
        '///压缩照片
        For Each File As String In FileSys.GetFiles(dir) 'file照片路径
            '///新建文件夹
            If FileSys.DirectoryExists(dir & "\缩略图\" ) Then '如果目录C:\MyFolder存在
            Else
                FileSys.CreateDirectory(dir & "\缩略图\" )
            End If
            '////
            Dim img As image = getImage(File)
            If img.width > 700 Then
                Dim bmp As new bitmap(img, 290.97,217.87 )
                bmp.save(dir & "\缩略图\" & filesys.GetName(File))
                bmp.Dispose
            End If
            '////
        Next
    Next
Else
    '单个文件夹操作
    For Each File As String In FileSys.GetFiles(dlg.SelectedPath) 'file照片路径
        '///新建文件夹
        If FileSys.DirectoryExists(dlg.SelectedPath & "\缩略图\" ) Then '如果目录C:\MyFolder存在
        Else
            FileSys.CreateDirectory(dlg.SelectedPath & "\缩略图\" )
        End If
        '////
        Dim img As image = getImage(File)
        If img.width > 700 Then
            Dim bmp As new bitmap(img, 290.97,217.87 )
            bmp.save(dlg.SelectedPath & "\缩略图\" & filesys.GetName(File))
            bmp.Dispose
        End If
        '////
    Next
End If
MessageBox.Show("完成","提示")
[此贴子已经被作者于2020/10/5 9:46:04编辑过]

 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111390 积分:567014 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/10/6 8:42:00 [只看该作者]

代码应该没有问题,可能是有隐藏的系统文件引起的,比如系统生成的图片缩略图文件,试试判断一下图片类型

        For Each File As String In FileSys.GetFiles(dir) 'file照片路径
If file.EndsWith(".jpg") OrElse file.EndsWith(".png")
……

 回到顶部
帅哥哟,离线,有人找我吗?
12397522011
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:91 积分:715 威望:0 精华:0 注册:2019/10/20 0:27:00
  发帖心情 Post By:2020/10/12 20:52:00 [只看该作者]

If file.EndsWith(".jpg") OrElse file.EndsWith(".png")

If file.EndsWith(".JPG") OrElse file.EndsWith(".PNG")

这个大小写貌似有区别,照片格式多的话好像不太方便,有没有啥好方法
[此贴子已经被作者于2020/10/12 21:01:32编辑过]

 回到顶部
帅哥,在线噢!
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111390 积分:567014 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/10/12 21:40:00 [只看该作者]

dim arr() as string = file.split(".")
dim ef as string = arr(arr.length - 1).tolower()
select case ef
case ".jpg",".png","bmp",..........
……
end select

 回到顶部