如果您想了解上传裁剪后的图像不起作用CropperJs和上传照片裁剪框不会动的知识,那么本篇文章将是您的不二之选。我们将深入剖析上传裁剪后的图像不起作用CropperJs的各个方面,并为您解答上传照片
如果您想了解上传裁剪后的图像不起作用 CropperJs和上传照片裁剪框不会动的知识,那么本篇文章将是您的不二之选。我们将深入剖析上传裁剪后的图像不起作用 CropperJs的各个方面,并为您解答上传照片裁剪框不会动的疑在这篇文章中,我们将为您介绍上传裁剪后的图像不起作用 CropperJs的相关知识,同时也会详细的解释上传照片裁剪框不会动的运用方法,并给出实际的案例分析,希望能帮助到您!
本文目录一览:- 上传裁剪后的图像不起作用 CropperJs(上传照片裁剪框不会动)
- android-我只想将裁剪后的图像保存到图库中.但会保存原始的完整图像.如何仅保存裁切后的图像?
- AngularJS $ rootScope$ broadcast在app.run中不起作用
- AngularJS $ rootScope。$ broadcast在app.run中不起作用
- AngularJS $rootScope.$broadcast在app.run中不起作用
上传裁剪后的图像不起作用 CropperJs(上传照片裁剪框不会动)
如何解决上传裁剪后的图像不起作用 CropperJs?
我有 2 个问题,我正在编写一个 javascript 脚本,其中包含以下代码
<script type="text/javascript" >
function readURL(input) {
if (input.files && input.files[0]) {
var reader = new FileReader();
reader.onload = function (e) {
$(''#imageId'').attr(''src'',e.target.result)
};
reader.readAsDataURL(input.files[0]);
setTimeout(initCropper,1000);
}
}
function initCropper(){
var image = document.getElementById(''blah'');
var cropper = new Cropper(image,{
aspectRatio: 1 / 1,crop: function(e) {
console.log(e.detail.x);
console.log(e.detail.y);
}
});
// On crop button clicked
document.getElementById(''crop_button'').addEventListener(''click'',function(){
var imgurl = cropper.getCroppedCanvas().toDataURL();
var img = document.createElement("img");
img.src = imgurl;
document.getElementById("cropped_result").appendChild(img);
//sending cropped image to server
cropper.getCroppedCanvas().toBlob(function (blob) {
var formData = new FormData();
formData.append(''croppedImage'',blob);
// Use `jQuery.ajax` method
path = ''C:/Users/Andy/Desktop/javascript/croppingwcropperjs/uploads'';
$.ajax(path,{
method: "POST",data: formData,processData: false,contentType: false,success: function () {
console.log(''Upload success'');
},error: function () {
console.log(''Upload error'');
}
});
});
})
}
</script>
这是它的html部分
<! DOCTYPE html>
<html>
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/cropperjs/1.4.1/cropper.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script name="jquery-croper-script">
!function(e,r){"object"==typeof exports&&"undefined"!=typeof module?r(require("jquery"),require("cropperjs")):"function"==typeof define&&define.amd?define(["jquery","cropperjs"],r):r(e.jQuery,e.Cropper)}(this,function(c,s){"use strict";if(c=c&&c.hasOwnProperty("default")?c.default:c,s=s&&s.hasOwnProperty("default")?s.default:s,c.fn){var e=c.fn.cropper,d="cropper";c.fn.cropper=function(p){for(var e=arguments.length,a=Array(1<e?e-1:0),r=1;r<e;r++)a[r-1]=arguments[r];var u=void 0;return this.each(function(e,r){var t=c(r),n="destroy"===p,o=t.data(d);if(!o){if(n)return;var f=c.extend({},t.data(),c.isPlainObject(p)&&p);o=new s(r,f),t.data(d,o)}if("string"==typeof p){var i=o[p];c.isFunction(i)&&((u=i.apply(o,a))===o&&(u=void 0),n&&t.removeData(d))}}),void 0!==u?u:this},c.fn.cropper.Constructor=s,c.fn.cropper.setDefaults=s.setDefaults,c.fn.cropper.noConflict=function(){return c.fn.cropper=e,this}}});
</script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/cropperjs/1.4.1/cropper.min.css" />
</head>
<body>
<input type="file" name="image" id="image" onchange="readURL(this);"/>
<div>
<img id="imageId" src="#" alt="your image" />
</div>
<div id="cropped_result"></div>
<button id="crop_button">Crop</button>
</body>
</html>
好的。使用上面的代码,我打算裁剪图像并将裁剪后的版本保存在我名为 uploads 的文件夹中。我设法裁剪了图像,但是我无法保存裁剪后的图像。我的问题是:
- 为了将裁剪后的图像成功提交到上传文件夹中,路径格式应该是什么?
- 我已经看到一些人为路径创建了一个 PHP 脚本,比如 uploads.PHP 是否必须让路径成为 PHP 中的脚本。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)
android-我只想将裁剪后的图像保存到图库中.但会保存原始的完整图像.如何仅保存裁切后的图像?
public class ImageCroppMainActivity extends Activity implements OnClickListener{
final int CAMERA_CAPTURE = 1;
//keep track of cropping intent
final int PIC_CROP = 2;
//captured picture uri
private Uri picUri;
final int PICK_IMAGE = 3;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_image_cropp_main);
//retrieve a reference to the UI button
Button captureBtn = (Button)findViewById(R.id.capture_btn);
//handle button clicks
captureBtn.setonClickListener(this);
Button browseBtn = (Button)findViewById(R.id.browse_btn);
//handle button clicks
browseBtn.setonClickListener(this);
}
public void onClick(View v) {
if (v.getId() == R.id.capture_btn) {
try {
//use standard intent to capture an image
Intent captureIntent = new
Intent(MediaStore.ACTION_IMAGE_CAPTURE);
//we will handle the returned data in onActivityResult
startActivityForResult(captureIntent, CAMERA_CAPTURE);
}
catch(ActivityNotFoundException anfe){
//display an error message
String errorMessage = "Whoops - your device doesn't support capturing images!";
Toast toast = Toast.makeText(this, errorMessage, Toast.LENGTH_SHORT);
toast.show();
}
}
else if(v.getId() == R.id.browse_btn)
{
//use standard intent to capture an image
Intent intent = new Intent(Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
//we will handle the returned data in onActivityResult
startActivityForResult(intent, PICK_IMAGE);
}
}
/**
* Handle user returning from both capturing and cropping the image
*/
protected void onActivityResult(int requestCode, int resultCode, Intent
data) {
if (resultCode == RESULT_OK) {
//user is returning from capturing an image using the camera
if(requestCode == CAMERA_CAPTURE){
//get the Uri for the captured image
picUri = data.getData();
//carry out the crop operation
performCrop();
}
//user is returning from cropping the image
else if(requestCode == PIC_CROP){
//get the returned data
Bundle extras = data.getExtras();
//get the cropped bitmap
Bitmap thePic = extras.getParcelable("data");
//retrieve a reference to the ImageView
ImageView picView =
(ImageView)findViewById(R.id.picture);
//display the returned cropped image
MediaStore.Images.Media.insertimage(getContentResolver(), thePic, "" , "");
picView.setimageBitmap(thePic);
}
else if(requestCode == PICK_IMAGE)
{
picUri = data.getData();
//carry out the crop operation
performCrop();
}}}
/**
* Helper method to carry out crop operation
*/
private void performCrop(){
//take care of exceptions
try {
//call the standard crop action intent (the user device may not support it)
Intent cropIntent = new
Intent("com.android.camera.action.CROP");
//indicate image type and Uri
cropIntent.setDataAndType(picUri, "image/*");
//set crop properties
cropIntent.putExtra("crop", "false");
//indicate aspect of desired crop
cropIntent.putExtra("aspectX", 1);
cropIntent.putExtra("aspectY", 1);
//indicate output X and Y
cropIntent.putExtra("outputX", 256);
cropIntent.putExtra("outputY", 256);
//retrieve data on return
cropIntent.putExtra("return-data", true);
//start the activity - we handle returning in onActivityResult
startActivityForResult(cropIntent, PIC_CROP);
}
//respond to users whose devices do not support the crop action
catch(ActivityNotFoundException anfe){
//display an error message
String errorMessage = "Whoops - your device doesn't support the
crop action!";
Toast toast = Toast.makeText(this, errorMessage,
Toast.LENGTH_SHORT);
toast.show();
}
}
}
解决方法:
只需3个步骤即可完成-
1)Android清单文件
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="camera.test.demo"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="8" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:name=".SimpleCameragalleryDemo"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
2)SimpleCameragallery演示代码
package camera.test.demo;
import android.app.Activity;
import android.content.ActivityNotFoundException;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
public class SimpleCameragalleryDemo extends Activity {
private static final int PICK_FROM_CAMERA = 1;
private static final int PICK_FROM_galLERY = 2;
ImageView imgview;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
imgview = (ImageView) findViewById(R.id.imageView1);
Button buttonCamera = (Button) findViewById(R.id.btn_take_camera);`enter code here`
Button buttongallery = (Button) findViewById(R.id.btn_select_gallery);
buttonCamera.setonClickListener(new View.OnClickListener() {
public void onClick(View v) {
// call android default camera
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT,
MediaStore.Images.Media.EXTERNAL_CONTENT_URI.toString());
// ******** code for crop image
intent.putExtra("crop", "true");
intent.putExtra("aspectX", 0);
intent.putExtra("aspectY", 0);
intent.putExtra("outputX", 200);
intent.putExtra("outputY", 150);
try {
intent.putExtra("return-data", true);
startActivityForResult(intent, PICK_FROM_CAMERA);
} catch (ActivityNotFoundException e) {
// Do nothing for Now
}
}
});
buttongallery.setonClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Todo Auto-generated method stub
Intent intent = new Intent();
// call android default gallery
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
// ******** code for crop image
intent.putExtra("crop", "true");
intent.putExtra("aspectX", 0);
intent.putExtra("aspectY", 0);
intent.putExtra("outputX", 200);
intent.putExtra("outputY", 150);
try {
intent.putExtra("return-data", true);
startActivityForResult(Intent.createChooser(intent,
"Complete action using"), PICK_FROM_galLERY);
} catch (ActivityNotFoundException e) {
// Do nothing for Now
}
}
});
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == PICK_FROM_CAMERA) {
Bundle extras = data.getExtras();
if (extras != null) {
Bitmap photo = extras.getParcelable("data");
imgview.setimageBitmap(photo);
}
}
if (requestCode == PICK_FROM_galLERY) {
Bundle extras2 = data.getExtras();
if (extras2 != null) {
Bitmap photo = extras2.getParcelable("data");
imgview.setimageBitmap(photo);
}
}
}
}
3)main.xml文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textViewAddCard"
android:layout_width="250dp"
android:layout_height="50dp"
android:text="Take Image"
android:textSize="16dp"
android:layout_gravity="center"
android:gravity="center"
android:typeface="sans"/>
<Button
android:id="@+id/btn_take_camera"
android:layout_width="250dp"
android:layout_height="50dp"
android:text="Take From Camera"
android:layout_marginTop="5dp"
android:layout_gravity="center"
android:typeface="sans"/>
<Button
android:id="@+id/btn_select_gallery"
android:layout_width="250dp"
android:layout_height="50dp"
android:text="Select from gallery"
android:layout_marginTop="10dp"
android:layout_gravity="center"
android:typeface="sans" />
<ImageView
android:id="@+id/imageView1"
android:layout_gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
希望对您有帮助.
AngularJS $ rootScope$ broadcast在app.run中不起作用
我在AngularJS
.run下有以下代码,该代码在我的本地开发计算机上可以正常运行,但在上传到客户端服务器后将无法工作…经过几次测试,很明显,在加载控制器时,事件并未尚未触发,因此取决于此事件的控制器中的大多数功能均无法正常工作。有人可以告诉我我在做什么错以及如何解决吗?谢谢
myApp.run(['AuthDataSvc','$rootScope',function (AuthDataSvc,$rootScope) {
AuthDataSvc.getAuth().then(function(Token){
$rootScope.$broadcast('Token',Token);
},function(status){
console.log(status);
});
}]);
AngularJS $ rootScope。$ broadcast在app.run中不起作用
我在AngularJS
.run下有以下代码,该代码在我的本地开发计算机上可以正常运行,但在上传到客户端服务器后将无法工作…经过几次测试,很明显,在加载控制器时,事件并未尚未触发,因此取决于此事件的控制器中的大多数功能均无法正常工作。有人可以告诉我我在做什么错以及如何解决吗?谢谢
myApp.run([''AuthDataSvc'', ''$rootScope'', function (AuthDataSvc, $rootScope) { AuthDataSvc.getAuth().then(function(Token){ $rootScope.$broadcast(''Token'', Token); }, function(status){ console.log(status); }); }]);
答案1
小编典典你总是要有一个比赛条件。我可以选择几种替代方法:
1)使用服务。我并不是这个选项的忠实支持者,因为它会导致产生Spaghetti代码。大多数情况下,您不希望控制器在登录之前运行。我喜欢选项2。
myApp.run([''AuthDataSvc'', ''$rootScope'', function (AuthDataSvc, $rootScope) { AuthDataSvc.getAuth(); /* no op we will use the service to determine logged in */}]);/* inside a controller */if(AuthDataSvc.isLoggedIn()){ //do something.}
2)使用route.resolve。解析是在路由上定义的,并且只有在将诺言设置为已解析后,Controller才会加载。我为您展示了一个示例ui-router
,ng-route
您需要选择毒药。如果您不使用ui-router
,则应考虑使用。
/* app.config ... route config.. */var waitForLogon = { UserToken: ["AuthDataSvc", function (AuthDataSvc) { return AuthDataSvc.logon(); }]};//this is for ng-route $routeProvider .when(''/Book/:bookId'', { templateUrl: ''--'', controller: ''MyCtrl'', resolve: waitForLogon })//this is for ui-router $stateProvider .state(''me'', { templateUrl: ''--'', controller: ''MeCtrl'', resolve: waitForLogon })
/* controller */ angular.module(''yourapp'') .controller(''MyCtrl'', ["UserToken", ... , function(UserToken){ //User Token will always be here when your Ctrl loads. });
/* service code -- */angular.module(''yourapp'') .service(''AuthDataSvc'', ["LogonModel", "$q", function(LogonModel, $q) { this._q = null; var that = this; this._doAuth = function(){ this.getAuth().then(function(Token){ that._q.resolve(Token) }, function(error){that._q.reject(error);} }; this.logon = function () { if(!this._q){ this._q = $q.defer(); this._doAuth();// <-current auth do here, and resolve this._q when done } return this._q.promise; }; });
AngularJS $rootScope.$broadcast在app.run中不起作用
myApp.run(['AuthDataSvc','$rootScope',function (AuthDataSvc,$rootScope) { AuthDataSvc.getAuth().then(function(Token){ $rootScope.$broadcast('Token',Token); },function(status){ console.log(status); }); }]);
1)使用服务.我并不是这个选项的粉丝,因为它会导致Spaghetti代码.大多数时候你不希望控制器在你登录之前运行.我更喜欢选项2.
myApp.run(['AuthDataSvc',$rootScope) { AuthDataSvc.getAuth(); /* no op we will use the service to determine logged in */ }]); /* inside a controller */ if(AuthDataSvc.isLoggedIn()){ //do something. }
2)使用route.resolve.在路由上定义了解析,只有在将promise设置为已解决后,Controller才会加载.我向你展示了ui-router和ng-route的一个例子,你需要选择你的毒药.如果你不使用ui-router
,你应该考虑它.
/* app.config ... route config.. */ var waitForlogon = { UserToken: ["AuthDataSvc",function (AuthDataSvc) { return AuthDataSvc.logon(); }] }; //this is for ng-route $routeProvider .when('/Book/:bookId',{ templateUrl: '--',controller: 'MyCtrl',resolve: waitForlogon }) //this is for ui-router $stateProvider .state('me',{ templateUrl: '--',controller: 'MeCtrl',resolve: waitForlogon })
/* controller */ angular.module('yourapp') .controller('MyCtrl',["UserToken",...,function(UserToken){ //User Token will always be here when your Ctrl loads. });
/* service code -- */ angular.module('yourapp') .service('AuthDataSvc',["logonModel","$q",function(logonModel,$q) { this._q = null; var that = this; this._doAuth = function(){ this.getAuth().then(function(Token){ that._q.resolve(Token) },function(error){that._q.reject(error);} }; this.logon = function () { if(!this._q){ this._q = $q.defer(); this._doAuth();// <-current auth do here,and resolve this._q when done } return this._q.promise; }; });
今天的关于上传裁剪后的图像不起作用 CropperJs和上传照片裁剪框不会动的分享已经结束,谢谢您的关注,如果想了解更多关于android-我只想将裁剪后的图像保存到图库中.但会保存原始的完整图像.如何仅保存裁切后的图像?、AngularJS $ rootScope$ broadcast在app.run中不起作用、AngularJS $ rootScope。$ broadcast在app.run中不起作用、AngularJS $rootScope.$broadcast在app.run中不起作用的相关知识,请在本站进行查询。
本文标签: