js如何从mp4文件获取电影名称图片

js如何从mp4文件获取电影名称图片,第1张

1、首先,在 DOS 环境下,如果想查看 dir 命令的用法,可以键入命令 dir /。

2、如果想按文件名的字母顺序显示文件,可以键入命令 dir /ON。其中,O 是英文单词 order(顺序)的首字母,而 N 则是英文单词 name(名称)的首字母。

3、如果想按文件的大小显示文件,可以键入命令 dir /OS。其中,O 是英文单词 order(顺序)的首字母,而 S 则是英文单词 size(大小)的首字母。

4、如果想按文件的日期显示文件,可以键入命令 dir /OD。其中,O 是英文单词 order(顺序)的首字母,而 D 则是英文单词 date(日期)的首字母。

5、如果想显示指定目录和所有子目录中的文件,则可以键入命令 dir /s。

6、而当我们输出的文件数量过多时,为了防止滚屏过快看不清楚,则可以使用分屏显示命令 dir /p。

注意事项:

dir广泛应用于多媒体光盘、教学/汇报课件、触摸屏软件、网络**、网络交互式多媒体查询系统、企业多媒体形象展示、游戏和屏幕保护等的开发制作。并非DOS命令和系统文件。

这里只介绍按下“保存”后如何将一个Bitmap对象保存为文件的执行步骤,对的下载,到Bitmap对象的转换,Bitmap对象的格式转换和压缩,以及界面设计部分全部都忽略了。

确定存储路径

获取外部存储权限

确定外部存储状态

确定文件名

保存到文件中

发送广播,通知系统扫描保存后的文件

确定存储路径

在Android中文件存储路径包括内部存储和外部存储两种类型。

对内部存储,当一个app被安装到手机后,Android系统会在内部存储的/data/data/目录下创建一个以包名称命名的文件夹。例如/data/data/comsohuinputmethodsogou/。一个应用对内部存储的所有访问都被限制在这个文件夹中,也就是说Android应用只能在该目录中读取,创建,修改文件。对该目录之外的其他内部存储中的目录都没有任何 *** 作的权限。因此,如果将保存在内部存储中,只能被应用自身读取,其他应用均无法读取。如果需要让系统图库,相册或其他应用能够找到保存的,必须将保存到外部存储中。

对外部存储,当一个app被安装到手机后,Android系统会在外部存储的/Android/data/目录下创建一个以包名命名的文件夹(这里第一个/不是根路径,而是相对外部存储所挂载路径的相对路径)。例如/storage/emulated/0/Android/data/comsohuinputmethod/。这个路径同样只能被应用自身读取,其他应用不能访问。因此,也不能将保存在这个目录中。

除外部存储的/Android目录之外的其他目录一般都是可以被其他应用访问的。目前,大多数应用都会在外部存储的根路径下建立一个类似包名的多层目录,以存储需要共享的文件。例如/storage/emulated/0/sogou/image/。还需要注意的是,很多查看的应用都支持按照文件夹来查看。如果将所在的文件夹取名为image,photo之类的,就无法和其他文件夹区分开,用户也不能识别该文件夹的用途。因此最好取一个有区分度的文件夹名字,例如百度贴吧就保存在/tieba目录,微信是保存在/tencent/MicroMsg/WeiXin目录。

由于Android系统的碎片化问题,不同设备上外部存储的路径很可能会不同,因此,不能直接使用/storage/emulated/0/作为外部存储的根路径。

Android SDK中 Environment类 提供了getExternalStorageDirectory()方法来获取外部存储的根路径。示例如下:

[java] view plain copy

String dir = EnvironmentgetExternalStorageDirectory()getAbsolutePath() + "/tencent/MicroMsg/WeiXin/"

需要注意的是EnvironmentgetExternalStorageDirectory()返回的路径中最后一个字符不是/,如果需要创建子目录,需要在子目录的前后都加上/。

获取外部存储权限

由于需要在外部存储中写文件,需要在AndroidManifestxml中增加如下的权限声明。

[java] view plain copy

<uses-permission android:name="androidpermissionWRITE_EXTERNAL_STORAGE"/>

确定外部存储状态

由于外部存储需要被挂载,也可以被卸载,在写入文件之前,需要先判断外部存储的状态是否正常。只有状态正常情况下才可以执行保存文件的 *** 作。获取外部存储状态同样是通过Environment类,通过EnvironmentgetExternalStorageState()可以得到一个字符串,来表示外部存储的状态。同时在Environment类中定义了一系列的String常量表示不同的状态。在所有的状态中只有内部存储处于EnvironmentMEDIA_MOUNTED状态时才可以读写文件,因此,需要将获取到的状态和EnvironmentMEDIA_MOUNTED做比较,如果不是EnvironmentMEDIA_MOUNTED状态,就返回保存失败。示例如下。

[java] view plain copy

//获取内部存储状态

String state = EnvironmentgetExternalStorageState();

//如果状态不是mounted,无法读写

if (!stateequals(EnvironmentMEDIA_MOUNTED)) {

return;

}

确定文件名

保存的文件名可以由应用根据自身需要自行确定,一般来说需要有一个命名规则,然后根据命名规则计算得到文件名。

这里列举几种常见的命名规则。

随机命名

这种命名规则是随机生成一个字符串或一组数字来对命名。

字符串可以通过UUID来生成,数字可以通过Random()类来生成,例如:

[java] view plain copy

//通过UUID生成字符串文件名

String fileName1 = UUIDrandomUUID()toString();

//通过Random()类生成数组命名

Random random = new Random();

String fileName2 = StringvalueOf(randomnextInt(IntegerMAX_VALUE));

这种命名规则是按照数字从小到大的顺序来对命名。

在程序启动时先获取文件名中当前最大数字的文件名,之后每保存一张就将数字加1即可。

时间命名

这种命名规则是根据保存的当前系统时间来对命名。

系统时间可以通过SystemcurrentTimeMillis()来获取,不过SystemcurrentTimeMillis()获取到的时间是一个long型的整数,如果用它做文件名,无法通过文件名直接看出文件的具体保存时间。可以通过SimpleDateFormat先对当前时间做格式化,然后再将其作为文件名来使用。例如:

[java] view plain copy

使用这种命名规则来命名需要注意的是同一秒钟可能会有多张需要保存,在得到当前系统时间对应的文件名后,需要判断该文件是否存在。如果文件已经存在,需要重新生成文件名。重新生成的文件名可以在之前的文件名后加上一个随机数后缀,或者是用毫秒数做后缀。

Calendar now = new GregorianCalendar();

SimpleDateFormat simpleDate = new SimpleDateFormat("yyyyMMddHHmmss", LocalegetDefault());

String fileName = simpleDateformat(nowgetTime());

文件URL命名

每张网络都有一个对应的URL,可以根据的URL来对命名。

不过URL中会包含一些不能用作文件名的特殊字符,此外直接用URL来命名可能会带来安全问题。为了避免这两个问题,可以将URL的MD5值作为文件名来使用。由于MD5是不可逆的,也就无法通过MD5值反向得到URL,同时MD5值对应的字符串只包含[0-9A-Z],不包含特殊字符,可是作为文件名使用。

由于每张的URL是唯一的,其对应的文件名也就是唯一的。如果需要每张网络只能生成一个文件,不允许保存为多份拷贝,可以用这种命名规则。在得到URL对应的文件名后,先判断文件是否已经存在,如果已经存在,直接覆盖或不处理。

保存到文件中

保存文件时,通过Bitmap的compress()方法将Bitmap对象压缩到一个文件输出流中,然后flush()即可。示例如下。

[java] view plain copy

try {

File file = new File(dir + fileName + "jpg");

FileOutputStream out = new FileOutputStream(file);

mBitmapcompress(BitmapCompressFormatJPEG, 100, out);

outflush();

outclose();

} catch (Exception e) {

eprintStackTrace();

}

发送广播,通知系统扫描保存后的文件

至此,已经实现将Bitmap对象保存成外部存储中的一个jpg格式的文件。但此时该文件只是保存在外部存储的一个目录中,必须进入其所在的目录中才可以看到。在系统图库,相册和其他应用中无法看到新建的文件。为了让其他应用能够知道文件被创建,必须通知MediaProvider服务将新建的文件添加到数据库中。

Android系统中常驻一个MediaProvider服务,对应的进程名为androidprocessmedia,此服务用来管理本机上的媒体文件,提供媒体管理服务。在系统开机或者收到外部存储的挂载消息后,MediaProvider会调用MediaScanner,MediaScanner会扫描外部存储中的所有文件,根据文件类型的后缀将文件信息保存到对应的数据库中,供其他APP使用。

MediaScannerReceiver是一个广播接收者,当它接收到特定的广播请求后,就会去扫描指定的文件,并根据文件信息将其添加到数据库中。当文件被创建后,就可以发送广播给MediaScannerReceiver,通知其扫描新建的文件。示例如下。

[java] view plain copy

try {

File file = new File(dir + fileName + "jpg");

FileOutputStream out = new FileOutputStream(file);

mBitmapcompress(BitmapCompressFormatJPEG, 100, out);

outflush();

outclose();

//保存后发送广播通知更新数据库

Uri uri = UrifromFile(file);

sendBroadcast(new Intent(IntentACTION_MEDIA_SCANNER_SCAN_FILE, uri));

} catch (Exception e) {

eprintStackTrace();

}

的异步保存

保存文件时,如果很大,或需要同时保存多张时,就需要较多的时间。为了避免阻塞UI线程,出现帧率下降或ANR,通常需要将保存 *** 作放到线程中去执行。当保存完毕后通过sendMessage()方法通知UI线程保存结果。

将保存放到后台线程去执行需要增加一些同步机制避免一些多线程问题。例如有两张需要保存,分别放到两个线程中去执行,保存时文件名以数字顺序增加。第一个线程选中文件名为125jpg,但此时文件还未创建,第二个线程判断125jpg不存在,于是也选取125jpg作为文件名,两张就保存到同一个文件中了。

设置保存路径

define('IMAGE_DIR', 'c:\\xampp\\htdocs\\scraper\\image\\');

保存函数。

$imageUrl = 你要的的url

$imageType = 你要的保存的格式

saveImage($imageUrl, $imageType = 'IMAGETYPE_GIF') {

if (!file_exists(IMAGE_DIR)) {

mkdir(IMAGE_DIR, 0777, true);

}

if( $imageType === IMAGETYPE_JPEG ) {

$fileExt = 'jpg';

} elseif ( $imageType === IMAGETYPE_GIF ) {

$fileExt = 'gif';

} elseif ( $imageType === IMAGETYPE_PNG ) {

$fileExt = 'png';

}

$newImageName = md5($imageUrl) '' $fileExt;

$image = new Image();

$image->load($imageUrl);

$image->resizeToWidth(100);

$image->save( IMAGE_DIR $newImageName, $imageType );

return $newImageName;

}

这是我的类,保存前可转换格式,大小。

<php

class Image {

private $_image;

private $_imageFormat;

public function load($imageFile) {

$imageInfo = getImageSize($imageFile);

$this->_imageFormat = $imageInfo[2];

if( $this->_imageFormat === IMAGETYPE_JPEG ) {

$this->_image = imagecreatefromjpeg($imageFile);

} elseif( $this->_imageFormat === IMAGETYPE_GIF ) {

$this->_image = imagecreatefromgif($imageFile);

} elseif( $this->_imageFormat === IMAGETYPE_PNG ) {

$this->_image = imagecreatefrompng($imageFile);

}

}

public function save($imageFile, $_imageFormat=IMAGETYPE_JPEG, $compression=75, $permissions=null) {

if( $_imageFormat == IMAGETYPE_JPEG ) {

imagejpeg($this->_image,$imageFile,$compression);

} elseif ( $_imageFormat == IMAGETYPE_GIF ) {

imagegif($this->_image,$imageFile);

} elseif ( $_imageFormat == IMAGETYPE_PNG ) {

imagepng($this->_image,$imageFile);

}

if( $permissions != null) {

chmod($imageFile,$permissions);

}

}

public function getWidth() {

return imagesx($this->_image);

}

public function getHeight() {

return imagesy($this->_image);

}

public function resizeToHeight($height) {

$ratio = $height / $this->getHeight();

$width = $this->getWidth() $ratio;

$this->resize($width,$height);

}

public function resizeToWidth($width) {

$ratio = $width / $this->getWidth();

$height = $this->getheight() $ratio;

$this->resize($width,$height);

}

public function scale($scale) {

$width = $this->getWidth() $scale/100;

$height = $this->getheight() $scale/100;

$this->resize($width,$height);

}

private function resize($width, $height) {

$newImage = imagecreatetruecolor($width, $height);

imagecopyresampled($newImage, $this->_image, 0, 0, 0, 0, $width, $height, $this->getWidth(), $this->getHeight());

$this->_image = $newImage;

}

}

>

上传界面:

<table width="100%" border="0" align="center" cellpadding="3" cellspacing="0" class="border">

<form name="form1" method="post" action="upfilesasp" enctype="multipart/form-data">

<tr>

<td height="25" valign="middle" align="center" colspan="2" class="Title"><strong>批量上传产品</strong></td>

</tr>

<form name="form1" method="post" action="upfilesasp" enctype="multipart/form-data">

<tr class=CommonListTitle height="25" bgcolor="#eeeeee">

<td height="22" align="center" valign="middle" class="tdbg"> 文件上传

<input type="hidden" name="act" value="upload">

(提交后请稍等!)</td>

</tr>

<tr c>

<td height="22" align="center" valign="middle" class="tdbg">

<script language="javascript">

function setid()

{

str='<br>';

if(!windowform1upcountvalue)

windowform1upcountvalue=1;

for(i=1;i<=windowform1upcountvalue;i++)

str+='文件'+i+':<input type="file" name="file'+i+'" style="width:250"><br>';

windowupidinnerHTML=str+'<br>';

}

</script>

<li> 上传个数:

<input name="upcount" type="text" value="1" size="10">

<input name="Button" type="button" class="button" onClick="setid();" value="· 设定 ·">

</li>

</td>

</tr>

<tr bgcolor="#eeeeee">

<td align="center" valign="middle" class="tdbg" id="upid"> 文件1:

<input type="file" name="file1" style="width:250" value=""></td>

</tr>

<tr bgcolor="#eeeeee">

<td height="22" align="center" valign="middle" class="tdbg">

<input name="Submit" type="submit" class="button" value="· 提交 ·">

<input name="Submit2" type="reset" class="button" value="· 重执 ·"></td>

</tr>

</form>

</table>

upfilesasp 上传结果:

<%

dim conn,mypath

set conn=servercreateobject("adodbconnection")

mypath=servermappath("//database/globalasa") '建立数据库连接

connopen "provider=microsoftjetoledb40;data source=" & mypath

%>

<!--#include FILE="upload_5xsoftinc"-->

<html>

<head>

<title>photo</title>

<link href="/style/stylecss" rel="stylesheet" type="text/css">

<meta >

以上就是关于js如何从mp4文件获取电影名称图片全部的内容,包括:js如何从mp4文件获取电影名称图片、php怎么获取域名之后的url、dir命令,如何提取目录下的所有文件夹名称(文件夹内还有文件夹),包括路径等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9335794.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-27
下一篇2023-04-27

发表评论

登录后才能评论

评论列表(0条)

    保存