0短い答え
ローカルの画像を検索するためにRNFSを使用してください。 「ネイティブリアクトでカメラロールへのリモート画像保存」あなたのタイトルのために
1.
キーワードがremote
です。
CameraRollを使用する前に、link the libraryを先に入力する必要があります。
![enter image description here](https://i.stack.imgur.com/E0yEH.png)
その後、私は1つImage
と1 Button
を作成します。
render: function() {
return (
<View style={styles.container}>
<Image ref="logoImage"
style={{ height:50, width: 50 }}
source={{uri: 'http://facebook.github.io/react/img/logo_og.png'}}
/>
<TouchableHighlight style={styles.button} onPress={this._handlePressImage} underlayColor='#99d9f4'>
<Text style={styles.buttonText}>Save Image</Text>
</TouchableHighlight>
</View>
);
},
私はボタンを押すと、プログラムはカメラロールに画像を保存します:
_handlePressImage: function() {
console.log('_handlePressImage.');
var uri = this.refs.logoImage.props.source;
console.log(uri);
CameraRoll.saveImageWithTag(uri, function(result) {
console.log(result);
}, function(error) {
console.log(error);
});
},
React Native
APIが推奨されていないことを警告していますが、代わりにpromise
を使用してください:
var promise = CameraRoll.saveImageWithTag(uri);
promise.then(function(result) {
console.log('save succeeded ' + result);
}).catch(function(error) {
console.log('save failed ' + error);
});
ここでは、カメラのロールにロゴ画像が表示されます。あなたのタイトルにもかかわらず、あなたのコンテンツ
であなたの本当の問題については
2.あなたのコードがlocal
パスを使用して、remote
言います。
パスを'./path/to/myimage.png'
と指定すると、イメージパスは.js
ファイルからの相対パスであると仮定します。つまり、イメージは最終的に実行されているアプリケーションとは関係なく、イメージファイルを見つけることができません。
<Image ref="logoImage"
style={{ height:50, width: 50 }}
source={require('./logo_og.png')}
/>
と、このように画像を保存します:
今ローカルファイルを使用するようにImage
を変更
になり
var promise = CameraRoll.saveImageWithTag('./logo_og.png');
:CameraRoll API
があるので
![enter image description here](https://i.stack.imgur.com/Kbu2L.png)
に対応する、これは最終的な実行中のアプリケーションに属し、javascriptには属しません。
npm install react-native-fs --save
して、ライブラリをリンク:
3. RNFSは、まず以下のコマンドを実行するローカル画像
を保存します。
Library/Caches
下の画像を入れてから:
var cacheImagePath = RNFS.CachesDirectoryPath+"/logo_og.png";
console.log(cacheImagePath);
var promise = CameraRoll.saveImageWithTag(cacheImagePath);
promise.then(function(result) {
console.log('save succeeded ' + result);
}).catch(function(error) {
console.log('save failed ' + error);
});
![enter image description here](https://i.stack.imgur.com/2WNVA.png)
ありがとう:
![enter image description here](https://i.stack.imgur.com/VlPMZ.png)
我々は地元の画像を保存することができます。
偉大な答えです。ありがとう!ええ、リモートURLを使うだけで問題のタイトルを変更するのを忘れてしまったことが分かりました。しかし、まだローカルファイルに苦労しています。私は反応ネイティブfsを見てみましょう。 DocumentDirectoryではなくCachesDirectoryを使用している理由は何ですか? – nicholas
@nicholas CachesDirectoryまたはDocumentDirectoryのどちらかが単なる例です。 –
ありがとう!フォローアップの質問:アニメーションGIFを保存すると、最初のフレームのみがiOSに保存されます。写真アプリは一般にどのような場合でもアニメーションを表示しませんが、メールを送信したり、GIFを共有したり開いたりしても、静的なGIFにすぎません...何が起こっているのかについてのアイデアはありますか? – nicholas